这是插入节点的函数
但是根没有更新
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;
}