c - 插入二叉搜索树

标签 c pointers tree malloc binary-search-tree

我制作了一个二叉搜索树

struct BTNode
{
    int info;
    struct BTNode *left,*right;
};

我编写了在树中插入节点的代码

void insert(struct BTNode *root,int data)
{
    struct BTNode *ptr;
    struct BTNode *n=malloc(sizeof(struct BTNode));
    n->info=data;
    n->left=NULL;
    n->right=NULL;
    if(root==NULL)
    root=n;
    else{
    ptr=root;
    while(ptr!=NULL){
        if(data<ptr->info){
            if(ptr->left==NULL)
            ptr->left=n;
            else
            ptr=ptr->left;
        }
        else if(data>ptr->info){
            if(ptr->right==NULL)
            ptr->right=n;
            else
            ptr=ptr->right;
        }
    }
    }
}

和一个 main() 函数

int main()
{
    struct BTNode *root=NULL;
    int choice,data;
    printf("\n1.Insert 2.Preorder 3.Exit\n");
    scanf("%d",&choice);
    switch(choice){
        case 1:
        printf("\nWrite the data: ");
        scanf("%d",data);
        insert(root, data);
        break;

但是当我尝试插入节点时,我的程序崩溃了。有什么提示有什么问题吗?

最佳答案

如果您希望能够更改根指针指向的位置,则应该将指针传递给根指针(抱歉,这有点复杂)。

你想要的是这样的:

void insert(struct BTNode **root,int data)
{
...
    if(*root == NULL) {
        *root = n;
    }
...
}

然后当您调用它时,您会将地址传递给根指针:

int main()
{
    struct BTNode *root=NULL;
    int data;
    ...
    scanf("%d", &data);
    insert(&root, data);
    ...
}

还要注意上面的内容:您应该将变量的地址传递给 scanf。也许这只是您转移时的一个拼写错误,因为您正确地使用了您的选择变量。

关于c - 插入二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935603/

相关文章:

exception - JavaFX 禁用 TreeView 折叠

c - 为什么下面的 C 代码会给出这样的输出?

c - 在 C 的 UDP 中用 recvfrom 生成的缓冲区中有什么?

c - 有限状态机实现

c - 减少指针直到指向数组的第一个元素

访问预定义数组时代码崩溃

c - 使用指针和数组时关于不兼容指针类型赋值的警告?

c++ - 在 C++ 中添加指向字符串的指针

algorithm - 伪代码函数返回处理树的两个结果

c - EXC_BAD_ACCESS 创建子节点(C)