插入二进制搜索树

我做了一个二叉搜索树

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(datainfo){ 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 。 也许这只是你转移的一个错字,因为你choice了你的choice var。

正如其他人所说,修改作为参数的指针将不会在方法之外产生任何影响。

C按值传递指针而不是引用。 这意味着你在函数中处理的指针是一个不同的指针,只指向同一个东西。 你必须将指针传递给指针,就像我上面的答案一样。

我希望我只能评论这个解释,但我想我需要声誉才能做到这一点..