2016-05-03 79 views
-1

我想写一个代码插入元素到一个二叉树没有递归。但我面临的问题是,每次我尝试插入一个节点,它不会插入和树不如预期般增长。只有第一个元素留在树中。二叉树代码错误

void insert(struct node **head1,int data1) 
{ 
    struct node *temp1,*temp; 

    temp=*head1; 
    struct node *datatemp,*prevtemp; 
    while(temp!=NULL) 
    { 
     if(temp->data < data1) 
     { 
      temp=temp->right; 
     } 
     else if(temp->data > data1) 
     { 
      temp=temp->left; 
     } 
    } 
    datatemp=(struct node *)malloc(sizeof(struct node)); 
    datatemp->data=data1; 
    datatemp->right=NULL; 
    datatemp->left=NULL; 
    temp=datatemp; 
} 

请帮助..我试图调试,但我无法找到我的逻辑错误。

+2

您可能想将您的标记从C++转换为c,因为您明显使用C语言。另外,请阅读:[mcve]。 – anatolyg

+0

你认为这个'temp = datatemp;'应该做什么? – StoryTeller

+0

请确保您处理您尝试插入的第二个号码与第一个号码相同的情况。您的代码处理< & >,但不是== – attaboy182

回答

1

这里这里temp=datatemp;设置你的函数中的本地指针指向新分配的节点。
但是,一旦这些函数存在,那个本地消失了,你的内存泄漏了。你不修改你找到的节点。