【发布时间】:2014-12-03 10:41:10
【问题描述】:
我正在尝试为二叉搜索树实现插入函数。虽然我的逻辑看起来应该可以工作,但是当我尝试通过一个将它变成配对列表的测试器函数运行它时,我不断得到一个太大的列表大小。这似乎只发生在我尝试插入多个重复键时,即 2 个“cat”实例和 2 个“fish”实例,否则它可以完美运行。
void insert (K k, V v)
{
TreeNode<K,V> * treeNode = new TreeNode<K,V> (k,v);
TreeNode<K,V> *temp=NULL;
TreeNode<K,V> *prev=NULL;
temp = root;
while(temp) {
prev = temp;
if(temp->key == treeNode->key)
{
temp->value = treeNode->value;
sizeCount--;
cout<<"REPLACEMENT MADE"<<endl; //This outputs as many times as it should
return; //This is what I was missing
}
if (temp->key < treeNode->key)
{
temp = temp->right;
}
else
{
temp = temp->left;
}
}
if (prev==NULL)
{root = treeNode;heightCount++;}
else {
if (prev->key<treeNode->key)
{
prev->right = treeNode;
}
if(prev->key>treeNode->key)
{
prev->left = treeNode;
}
}
sizeCount++;
}
我会注意到,我似乎很难在紧凑的代码和提供足够的信息之间取得良好的平衡。如果需要,我可以提供更多代码。
【问题讨论】:
-
替换值时为什么要更改
sizeCount? -
我已经更新了代码,这是因为 sizeCount 总是在函数结束时递增。压缩代码时误删了一行。
-
我还要注意 sizeCount 虽然没有在问题区域中使用,但实际上总是显示正确的值。所以我得到了正确的 REPLACEMENT 和 size 输出,但不是当它转换成列表时......
-
所以在制作列表时可能会出错?
-
老兄,你完全不知道这有多神奇。现在快凌晨 4 点了,我从午夜开始就一直在工作,试图让这段代码正常工作。那一行更改做到了。请将此添加为答案,我想选择它。谢谢,谢谢,谢谢!
标签: c++ nodes binary-search-tree