C语言 插入二叉搜索树



我做了一个二叉搜索树

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.Exitn");
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。 也许这只是您转移时的错字,因为您正确地使用了choicevar。

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

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

相关内容

  • 没有找到相关文章

最新更新