【发布时间】:2011-07-14 13:59:15
【问题描述】:
我有一个问题,我的二叉树中的项目插入不正确。我在每个节点中插入字符串。我想我可能做错了什么,因为似乎我总是以错误的树结束。即
A、B、C
我应该有
B
/ \
A C
但不知何故我最终得到了这样的结果:
C
/ \
B A
或者根据我在树中插入的顺序而有所不同。
这是我的树类:
这是我的插入方法和插入辅助方法。你能看看我做错了什么吗?提前致谢。
void BinarySortTree::insert(string key)
{
if(root != NULL)
{
insert(key, root);
}
else
{
root = new TreeNode;
root->item = key;
root->left = NULL;
root->right = NULL;
}
}
void BinarySortTree::insert(string key, TreeNode *node)
{
bool done = false;
while(!done)
{
if(key.compare(node->item) < 0)
{
if(node->left != NULL)
{
node = node->left;
}
else
{
node->left = new TreeNode;
node->left->item = key;
node->left->left = NULL;
node->left->right = NULL;
done = true;
}
}
else if(key.compare(node->item) > 0)
{
if(node->right != NULL)
{
node = node->right;
}
else
{
node->right = new TreeNode;
node->right->item = key;
node->right->left = NULL;
node->right->right = NULL;
done = true;
}
}
else if(key.compare(node->item) == 0)
{
done = true;
}
}
}
【问题讨论】:
-
您的算法不是递归的,请更正您的问题标签。我建议你重新阅读插入的方式和方法。
-
@Mr.TAMER:您在上面看到的实现肯定不是递归的。至于算法本身……没那么简单。在算法递归的广泛定义下,它可以正式称为递归。事实上,从算法的角度来看,任何循环都可以解释为递归的退化形式。
-
@AndreyT:谢谢,我不知道... 经验教训 :)
-
我编译了你的代码,你到底是按什么顺序插入这些字母的?
-
我认为您列出的方法没有任何问题。如果您按“A、B、C”的顺序插入值,您应该得到一个非平衡树(如 Gajet 的答案)。我建议您在这里查看或发布您拥有的其他方法,尤其是有序旅行和漂亮的打印方法。
标签: c++ recursion binary-tree insertion non-recursive