我有一個問題,我的二進制樹中的項目插入不正確。我在每個節點中插入字符串。我想我可能會做錯事,因爲它似乎總是以錯誤的方式結束。即二叉搜索樹。插入方法插入不正確
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;
}
}
}
你的算法是不是遞歸的,請糾正你的問題的標籤。我建議你重新閱讀插入的方式和方法。 – 2011-03-13 19:21:23
@ Mr.TAMER:你看到的*實現*當然不是遞歸的。至於*算法*本身......並不那麼簡單。它可以在算法遞歸的廣義定義下正式稱爲遞歸。事實上,從算法的角度來看,任何循環都可以被解釋爲遞歸的退化形式。 – AnT 2011-03-13 19:47:06
@AndreyT:謝謝,我不知道...經驗教訓:) – 2011-03-13 19:50:22