2012-08-12 190 views
1

此問題與二叉搜索樹有關。下面是我使用將節點添加到樹的函數

struct _Node 
{ 
    _Node *Parent; 
    int Data; 
    _Node *Left; 
    _Node *Right; 
}; 

現在,這裏的一個節點的定義函數的定義添加一個節點一旦創建根

void AddNode(_Node *Incoming, _Node *currentNode) 
{ 

      if(!currentNode) 
      { 
       currentNode = Incoming; 
      } 
      else if(currentNode->Data >= Incoming->Data) 
      { 
       Incoming->Parent = currentNode; 
       AddNode(Incoming, currentNode->Left); 
      } 
      else if(currentNode->Data < Incoming->Data) 
      { 
       Incoming->Parent = currentNode; 
       AddNode(Incoming, currentNode->Right); 
      } 

} 

ADDNODE功能是基於一個遞歸方法。主要代碼

_Node *Root= new _Node; 
Root->Data = 50; 
Root->Parent = nullptr; 
Root->Left = nullptr; 
Root->Right = nullptr; 


_Node *Node2 = new _Node; 
Node2->Data = 25; 
Node2->Parent = nullptr; 
Node2->Left = nullptr; 
Node2->Right = nullptr; 
_Node *Node3 = new _Node; 

    AddNode(Node2, Root); 

問題: 一旦我走出來添加節點功能,我發現根節點亙古不變的有向左或右子集到節點。根據我的說法,每當我將節點正確添加到根節點時,就會傳遞指向節點的指針。這沒有發生。你能幫我理解我在做什麼錯誤嗎?

回答

0

嘗試

AddNode(Incoming, currentNode->Left); 

,而不是

AddNode(Incoming, Incoming->Left); 

同爲Right

+0

OO我的上帝這樣一個愚蠢的錯誤,我正在做...我很抱歉,因爲這麼蹩腳...我認爲它的時間對我來說這一天..感謝您的幫助 – virusrocks 2012-08-12 19:06:58

+0

嘿吉爾,這個改變是還是行不通。實際上,早些時候我以同樣的方式進行,但是重新定義了此功能併發出了複製粘貼錯誤。這仍然不起作用 – virusrocks 2012-08-12 19:12:59

+0

嘗試通過引用'void AddNode(_Node * Incoming,_Node *&currentNode)傳遞當前節點指針' – Gir 2012-08-12 19:15:31