Chương trình xóa node trong cây nhị phân

struct node {
    int data;
    struct node *left,*right;
};
typedef struct node NODE;
typedef NODE* TREE;

void delNote(TREE &t,int data)
{
    if(t==NULL){
        return;
    }
    if(t->data<data)
    {
        delNote(t->right,data);
    }
    else if(t->data>data)
    {
        delNote(t->left,data);
    }
    else{
            NODE *X  =t;
        if(t->left==NULL)
        {

            t=t->right;
        }else if(t->right==NULL)
        {
            t=t->left;
        }

        delete X;
    }
}

Ở trên của e là hàm xóa 1 node có 1 nhánh con e tìm được trên mạng, cho e hỏi là tại sao khi delete Xt=t->right; hay t=t->left; lại không bị ảnh hưởng ạ. Tại e tưởng delete X thì cũng phải kéo theo t chứ ạ.

t đang truyền tham chiếu nên gán vậy là ổn.

Nếu node chỉ có 1 cây con thì nó giống như xóa và nối trong DSLK: t = t->left; cũng tương tự t = t->next;.

3 Likes

Dạ ý em là tại sao em xóa X mà t không bị ảnh hưởng , e tưởng X là con trỏ khi trỏ tới t thì khi xóa X thì t cũng bị xóa theo ạ

Vì X đã gán bằng t (= node hiện tại) nên cao lắm là X bị xóa thôi chứ t đã nhận trị mới.

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