我正在用 C 编写插入 BST 的代码。当我遍历树时,第一个片段似乎无效。我不明白为什么它不起作用。 这不起作用:
void insert(Node* temp, int data)
{
if(temp==NULL)
temp=Newnode(data);
else if(data<temp->data)
insert(temp->left,data);
else if(data>temp->data)
insert(temp->right,data);
}
这个有效:
Node* insert(Node* temp, int data)
{
if(data<temp->data)
if(temp->left!=NULL) insert(temp->left,data);
else temp->left= Newnode(data);
else if(data>temp->data)
if(temp->right!=NULL) insert(temp->right,data);
else temp->right= Newnode(data);
}
注意:我使用了#define Node 结构节点。 Newnode() 分配一个新节点并完美运行。
最佳答案
看看当您将 NULL
作为根值传递时会发生什么:
temp
被分配了一个新的节点实例。但是,赋值只是 insert()
的本地赋值,因此在调用返回后赋值“消失”。
您可能希望将插入方法签名更改为
void insert(Node **temp, data)
并使用
*temp = Newnode(数据);
让它像您期望的那样工作。
关于c - 为什么插入 BST 的代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681425/