Xóa node cây nhị phân

void deleteAt(node *t, int x)
{
    if(t==NULL) return;
    else {
        if(t->data < x) deleteAt(t->right,x);
        else if(t->data > x) deleteAt(t->left,x);
        else {
            node *p = t;
            if(t->left == NULL){
                t = t->left;
            }
            else if(t->right == NULL){
                t = t->right;
            }
        delete(p);
        }
    }
}

phải sửa hàm này ntn để nó xóa node cha mà không ảnh hưởng node con ạ, nó toàn xóa cả cha lần con thôi ạ !!!

Hỏi cách sửa thì hẳn bạn biết vấn đề ở đâu rồi nhỉ. :slightly_smiling_face:

Vậy bạn thử nói vấn đề đó ra xem, và cùng phần tích được không. :smiley:

4 Likes

bạn mong muốn kết quả ra sao khi xóa nốt cha?
bạn cần biết (xác định) những gì cần làm trước khi bắt tay vào làm (code)

2 Likes

Dạ em muốn xóa node có 1 node con và sau khi xóa thì node con sẽ thay thế vị trí node cha j

1 Like

Não em hơi lag tý khi t->left == NULL mà vẫn gán t = t->left, nhưng sau khi sửa thành t = t->right nó vẫn bị xóa node cha xóa luôn node con ạ.

1 Like

rồi chuyện gì sẽ xảy ra khi có nhiều con, ai lên thay? những node còn lại thì thế nào?

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?