バイナリツリーのアイテムが正しく挿入されないという問題があります。各ノードに文字列を挿入しています。私はいつも間違った木になってしまうように見えるので、私は何か間違ったことをしているのではないかと思います。すなわち
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;
}
}
}