繁体   English   中英

插入C中的二叉树

[英]insertion in a binary tree in C

下面的代码正在运行,但在将第二个数字插入树后,程序崩溃了。为什么会这样? 用户输入1用于插入,0用于退出提前感谢...

#include<stdio.h>
#include<stdlib.h>
typedef struct ll
{
 int data;
 struct ll *left;
 struct ll *right;
}node;
void insert(node **root,int n)
{
 if((*root)==NULL)
 {
  (*root)=(node*)malloc(sizeof(node));
  (*root)->data=n;
 }
 else if(((*root)->data)<n)
 {
  insert(&(*root)->right,n);
 }
 else if(((*root)->data)>n)
 {
  insert(&(*root)->left,n);
 }
}
main()
{
 node *head=NULL;int choice,n;
 while(1)
 {
 printf("Enter 1 to insert node\n 0 to exit\n");
 scanf("%d",&choice);
 switch(choice)
 {
  case 1: printf("Enter number\n");
          scanf("%d",&n);
         insert(&head,n);break;
  case 0:exit(0);
 }
 }
}

分配新node时,不要初始化leftright成员

 if((*root)==NULL)
 {
  (*root)=(node*)malloc(sizeof(node));
  (*root)->data=n;
 }

分配node ,但离开它的leftright指向不可预测值的成员。 分配第二个nodeinsert将尝试取消引用其中一个值。 这会导致不确定的行为; 在尝试取消引用代码无法读取或未正确对齐的地址之后,迟早会发生崩溃。

您可以通过初始化新node所有成员来避免这种情况:

if((*root)==NULL)
{
    (*root)=malloc(sizeof(node));
    (*root)->data=n;
    (*root)->left=NULL;
    (*root)->right=NULL;
}

或者,您可以使用calloc分配内存,以将新node的成员初始化为0

if((*root)==NULL)
{
    (*root)=calloc(1, sizeof(node));
    (*root)->data=n;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM