c - 为什么插入 BST 的代码不起作用?

标签 c data-structures binary-search-tree

我正在用 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/

相关文章:

c++ - 二叉搜索树在一个奇怪的地方出现错误

c - 我如何使用数组和 MACRO 创建一个调查,告诉 C 中的评级和响应数量?

c - 将 Swift 字符串数组分配给采用 char ** 值的 C 结构变量

c++ - 增强型 FrogRiverN

java - 编程新手 : What is the difference between run time error and compilation error?

java - 返回数组列表的算法的空间复杂度是多少?

java - 如何从平衡二叉搜索树中按升序打印整数?

c - 指针地址相乘

c++ - 内联函数的前向声明

java - 确定已满的最高级别 - 二叉搜索树