2012-08-12 137 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