我制作了一个二叉搜索树
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/