2016-05-03 101 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;設置你的函數中的本地指針指向新分配的節點。
但是,一旦這些函數存在,那個本地消失了,你的內存泄漏了。你不修改你找到的節點。