这是插入节点的函数
但是根没有更新

Node *insert(Node **root,int data) {
    Node *k = *root;

    if (*root==NULL) {
        *root = createNode(data);
        return *root;
    }
    else {
        while (*root) {
            // printf("%d", (*root)->data);
            if (data < (*root)->data) {
                *root = (*root)->left;
            } else {
                *root = (*root)->right;
            }
        }

        *root = createNode(data);
        return k;
    }
}

这是插入节点的函数
但是根没有更新

最佳答案

你没有在树下正确地前进。
这:

if(data < (*root)->data){
    *root = (*root)->left;
}else{
    *root = (*root)->right;
}

应该是这样的:
if(data < (*root)->data){
    root = &(*root)->left;
}else{
    root = &(*root)->right;
}

指向指针root的指针的目的是保存指针的地址,该地址最终将被更新以保存指向新节点的指针。当您沿着树向下走时,应该更新root以保存下一个潜在候选指针的地址最后,您将到达一个空指针,因此是挂起新节点的候选者。
fwiw,这里的初始测试为空:
if(*root==NULL){
    *root = createNode(data);
    return *root;
}else{

是没有意义的,root的保存是错误的固定和减少,应为:
Node *insert(Node **root,int data)
{
    Node **k = root;

    while (*root)
    {
        if (data < (*root)->data)
            root = &(*root)->left;
        else
            root = &(*root)->right;

    }
    *root = createNode(data);
    return *k;
}

07-24 09:52
查看更多