
Nguyên bản được gửi bởi
hiepsithong
Ví dụ như mình có cây nhị phân tìm kiếm gom 1 mảng các số nguyên sau: 5,10,12,15,16,18,20,25,28,30,35
Giờ mình cần xóa nút mang giá trị 18 thì chương trình trên lại ko cho kết quả đúng. Chương trình đó chỉ đúng với các nút có 2 con còn với nút lá và các nút chỉ có 1 con thì lại cho kết quả sai. Xin các bro chỉ giáo???
Cậu thử làm theo các sau đây:
Tôi có một số hàm sau:
Hàm node_t SearchLa(tree t); //Hàm này dùng để tìm node lá gần nhất của một cây hàm này cậu cũng có thể cài đặt đệ quy duyệt tìm thấy nú là thì trả về nút đó.(tự cài đặt)
Hàm swapNode(Node_t node1,Node_t node2); dùng để hoán đổi giá trị của hai node trên cây nhị phân (tự cài đặt)
Code chính:
Input node_t node là node cần xóa.
Code:
Nếu node không có con thì xóa node;
Nếu node có con bên trái thì
{
temp=SearchLa(node->left);//duyệt tìm lá gần nhất của cây con bên trái
swapNode(node,temp);
delete temp;
}
Ngược lại nếu có cây con bên phải thì
{
temp=SearchLa(node->left);
swapNode(node,temp);
delete temp;
}
Thuật toán trên như sau: Nếu node bạn cần xóa là node không có con thì xóa. Nếu có con thì tìm 1 là của cây con bên trái hay phải sau đó chuyển giá trị của lá lên node cần xóa cuối cùng là xóa lá.