我遇到的问题是我的二叉树中的项目插入不正确。我在每个节点插入字符串。我想我可能做错了什么,因为看起来我总是以错误的树结束。即
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;
}
}
}
答案 0 :(得分:2)
这是因为当你永远不会改变被插入的东西时,例如,如果你首先插入C,你插入的下一个项目(例如b)永远不会发生在root中,所以如果插入“C”,“B”, “A”按此顺序你将有一棵形状如下的树:
C
/
B
/
A
你必须检查每一个当前节点是否必须改变!然后重新插入你的键,你的根可能会在每次插入时改变!并且您绘制的树永远不会生成代码生成的唯一可见的树形式,这些树形对于给定的输入:
ABC ACB BAC CBA CAB
BCA
A A B C C
\ \ / \ / /
B C A C B A
\ / / \
C B A B