这是插入节点的功能 但root没有更新
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;
}
}
这是插入节点的功能 但root没有更新
答案 0 :(得分:4)
你没有正确地向下推进root
。
此:
if(data < (*root)->data){
*root = (*root)->left;
}else{
*root = (*root)->right;
}
应该是这样的:
if(data < (*root)->data){
root = &(*root)->left;
}else{
root = &(*root)->right;
}
指向指针root
的目的是保存指针的地址,该指针最终将被更新以保存指向新节点的指针。当您沿树走下去时,应更新root
以保存下一个潜在候选指针的地址。最终,您将到达一个NULL指针,因此是您将挂起新节点的候选者。
并且fwiw,这里对NULL的初始测试:
if(*root==NULL){
*root = createNode(data);
return *root;
}else{
毫无意义,保存k
是错误的。固定和缩小,应该是:
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;
}