2010-12-23 165 views
1

hi 我正在寫一個BST,並且寫了下面的函數來添加Child。這個功能有什麼問題

void addChild(T value) 
{ 
    temp = root; 
    while(0 != temp) 
    { 
    temp1 = temp; 
    if(value > temp->getValue()) 
      temp = temp->getRightChild(); 
     else 
      temp = temp->getLeftChild(); 
    } 
    if(temp1->getValue() > value) 
    { 
     temp1->setRightChild(new Child(value)); 
    } 
    else 
    { 
     temp1->setLeftChild(new Child(value)); 
    } 
} 

我給「23 12 122 1 121 15」作爲輸入。 Root是我在類的構造函數中創建的節點23。

問題:當我在做樹遍歷時,我只得到23和15作爲輸出。 問題:我在這個功能中做錯了什麼?

+0

也許你的遍歷函數有問題嗎?另外,我沒有看到`temp`和`temp1`變量的聲明。他們是全球性的? 無論如何,我建議使用調試器(例如`gdb`)來跟蹤代碼。應該很容易找到問題 – davka 2010-12-23 09:55:50

回答

1

嘗試:

if(value > temp1->getValue()) 

...否則你插入條件不同於搜索在上面的循環中的點。

+0

不應該添加一個if(root == null)return;在功能的開始,以及? – Muggen 2010-12-23 09:59:23

+0

@Muggen - 也許`if(root == null){root = new Child(value); return;}` - 但他確實提到過root在他的構造函數中。 – sje397 2010-12-23 10:02:25

1

條件混淆了。

如果(值> TEMP->的getValue()):GetRight時

是相反

如果(temp1->的getValue()>值):setRight

嘗試只是改變了最後的情況。

0

我同意Captain和sje以前的答案,但他們沒有解釋你的樹的人口過少是否嚴重。可能的問題是,您添加作爲子女temp1,完全丟棄上一個孩子。這可能在T :: setRightChild()和T :: setLeftChild()函數中完成。