2010-12-23 117 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()函数中完成。