递归二叉树插入

Man*_*son 1 c tree recursion binary-tree insertion

所以我试图使用这个递归函数将值插入二叉树:

void add(node* *hd, int v){
node* curr = *hd;
if(curr == NULL){
    curr = (node*)malloc(sizeof(node));
    curr->value = v;
}else{
    if(v < curr->value){
        add(&curr->left, v);
    }else{
        add(&curr->right, v);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

它似乎没有用,我只是不明白为什么我不能做这样的事情.我该怎么办呢?

1--*_*--1 6

您需要初始化指针,因为它们可能会设置为分配空间时获得的任何内容.你现在通过的时候add(&curr->left, v); curr->left可能不是指针,但它仍然不是NULL;

void add(node* *hd, int v){
    node* curr = *hd;
    if(curr == NULL){
        curr = malloc(sizeof(node));
        curr->left = curr->right = NULL;
        curr->value = v;
        *hd = curr; // from Mohamed KALLEL
    }else{
        if(v < curr->value){
            add(&curr->left, v);
        }else{
            add(&curr->right, v);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


unw*_*ind 5

您的新节点没有正确"连接",因为您只是将指针存储在局部变量中curr,而不是将其写入*hd以更改调用者的指针.

另外,不要转换malloc()C中的返回值.