我通过使用递归尝试了以下算法,但节点没有附加到树中。请告诉我出了什么问题。
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;
}
答案 0 :(得分:0)
正如Weather Vave所说,问题是:
t->right
仅更改传递的本地副本, 然后忘记了这一点,以及来电者t->left
或void 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;