这个功能有什么问题
问题描述:
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作为输出。 问题:我在这个功能中做错了什么?
答
条件混淆了。
如果(值> TEMP->的getValue()):GetRight时
是相反
如果(temp1->的getValue()>值):setRight
尝试只是改变了最后的情况。
答
我同意Captain和sje以前的答案,但他们没有解释你的树的人口过少是否严重。可能的问题是,您添加值作为子女temp1,完全丢弃上一个孩子。这可能在T :: setRightChild()和T :: setLeftChild()函数中完成。
也许你的遍历函数有问题吗?另外,我没有看到`temp`和`temp1`变量的声明。他们是全球性的? 无论如何,我建议使用调试器(例如`gdb`)来跟踪代码。应该很容易找到问题 – davka 2010-12-23 09:55:50