2012-10-28 81 views
1

我寫了一個二叉樹代碼,用於在非遞歸方法中插入元素。代碼沒有按預期工作。不管有多少次我調試代碼,沒有什麼似乎是錯的,但我得到錯誤的結果。我希望你們能幫忙。提前致謝。非遞歸二叉樹插入()方法不起作用

void insert(int element){ 
    if(root == NULL){ 
     struct elemq *node; 
     node = (struct elemq *)malloc(sizeof(struct elemq)); 
     node->ele = element; 
     node->left = NULL; 
     node->right = NULL; 
     root = node; 
     cout << root->ele << "\n"; 
    } 
    else{ 
     struct elemq *ref; 
     ref = root; 
     while(ref != NULL){ 
      if(element <= ref->ele){ 
       if(ref->left == NULL){ 
        struct elemq *node; 
        node = (struct elemq *)malloc(sizeof(struct elemq)); 
        node->ele = element; 
        node->left = NULL; 
        node->right = NULL; 
        ref->left = node; 
        break; 
       } 
       else{ 
        ref = ref->left; 
       } 
      } 
      else if(element > ref->ele){ 
       if(ref->right == NULL){ 
        struct elemq *node; 
        node = (struct elemq *)malloc(sizeof(struct elemq)); 
        node->ele = element; 
        node->left = NULL; 
        node->right = NULL; 
        ref->right = node; 
        break; 
       } 
       else{ 
        ref = ref->right; 
       } 
      } 
     } 
    } 
} 

每次我試圖插入一個元素,每個元素都被視爲root,不僅是第一次。所以,每一次,if(root == NULL)的條件是true。我將root聲明爲全局變量,並將其初始化爲NULL,main()。我通過將cout <<置於第一個if()的條件來了解這一點。我將之前的帖子修改爲這個新問題。

+0

神聖的縮進! ;) – goji

+1

某處某處的代碼是垃圾根。在整個地方插入'cout << root <<「\ n」;'看看它是否回到零。然後找到它發生的地方... – Yakk

+0

它是我的錯誤。抱歉。每次我插入一個元素時,我都會將根設爲null。謝謝 –

回答

2
node = ref->left; 

你想

ref->left = node; 

併爲參考 - 類似>右

+0

我做了改變。不過,每次我嘗試插入一個元素時,每個元素都被視爲根,而不僅僅是在第一次。所以,每次,條件if(root == NULL)是真的。我將root聲明爲全局變量,並在main()中將其初始化爲NULL。 –

1

我認爲你被錯誤設置要添加到引用的節點上,而不是設置左,對正在添加的節點的正確引用。 將node = ref->left更改爲ref->left = node,同樣對於右側。