如何在BST中添加节点?

时间:2017-05-12 18:52:03

标签: c pointers recursion data-structures binary-search-tree

我通过使用递归尝试了以下算法,但节点没有附加到树中。请告诉我出了什么问题。

void search_add(struct node *t)
{
    if(t==NULL)
    {
        t = newNode(temp->key);
        return;
    }
    else if(t->key>temp->key)
    {
        search_add(t->right);
    }
    else if (t->key<temp->key)
    {
        search_add(t->left);
    }
}

void insert(struct node *node, int key)
{
    temp = newNode(key);
    search_add(node);
}

int main(void)
{
    root = newNode(50); 
    insert(root,30);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

正如Weather Vave所说,问题是:

  

t->right仅更改传递的本地副本,   然后忘记了这一点,以及来电者t->leftvoid search_add(struct node *t)   仍然是NULL。

解决方案可能是改变这种情况:

void search_add(struct node *t)

到此:

*t

当然,然后在函数体内使用t,而不是=

这样你就传递了一个双指针,它将使更改在函数范围之外可见。

答案 1 :(得分:0)

你没有在递归中分配任何值。请尝试下面的代码我是一个java所以请忽略任何语法问题。

/* If the tree is empty, return a new node */
    if (node == NULL) return newNode(key);

    /* Otherwise, recur down the tree */
    if (key < node->key)
        node->left  = insert(node->left, key);
    else if (key > node->key)
        node->right = insert(node->right, key);   

    /* return the (unchanged) node pointer */
    return node;