1

嗨,我正在编写 BST 并编写了以下添加子函数。

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”作为输入。根是我在类的构造函数中创建的节点 23。

问题:当我进行树遍历时,我只得到 23 和 15 作为输出。 问题:我在这个函数中做错了什么?

4

3 回答 3

1

尝试:

if(value > temp1->getValue()) 

...否则您的插入条件与您在上面的循环中搜索一个点不同。

于 2010-12-23T09:47:11.900 回答
1

条件混杂。

if(value > temp->getValue()) : getRight

是相反的

if(temp1->getValue() > value) : setRight

尝试仅更改最后一个条件。

于 2010-12-23T09:47:52.883 回答
0

我同意船长和 sje 先前的回答,但他们没有解释严重的,我们应该说,你的树的人口不足。可能的问题是您将value添加为temp1的子项,完全丢弃了以前的子项。这可能在 T::setRightChild() 和 T::setLeftChild() 函数中完成。

于 2010-12-23T09:52:41.957 回答