C++ 双参数二叉树(C+;+;)的插入函数
我正在尝试为二进制搜索树实现一个插入函数。虽然我的逻辑看起来应该是可行的,但当我尝试通过一个tester函数运行它,将它转换成一个成对的列表时,我总是得到一个太大的列表大小。这似乎只有在我尝试插入多个重复的键时才会发生,即2个“猫”和2个“鱼”,否则它的工作原理是完美的C++ 双参数二叉树(C+;+;)的插入函数,c++,nodes,binary-search-tree,C++,Nodes,Binary Search Tree,我正在尝试为二进制搜索树实现一个插入函数。虽然我的逻辑看起来应该是可行的,但当我尝试通过一个tester函数运行它,将它转换成一个成对的列表时,我总是得到一个太大的列表大小。这似乎只有在我尝试插入多个重复的键时才会发生,即2个“猫”和2个“鱼”,否则它的工作原理是完美的 void insert (K k, V v) { TreeNode<K,V> * treeNode = new TreeNode<K,V> (k,v); TreeNode<K,V>
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++;
}
void插入(K,V)
{
TreeNode*TreeNode=新的TreeNode(k,v);
TreeNode*temp=NULL;
TreeNode*prev=NULL;
温度=根;
while(temp){
prev=温度;
如果(临时->键==树节点->键)
{
温度->值=树节点->值;
大小计数--;
考夫特;
}
}
if(prev==NULL)
{root=treeNode;heightCount++;}
否则{
如果(上一个->键)
{
上->右=树节点;
}
如果(上一个->键>树节点->键)
{
上一个->左=树节点;
}
}
sizeCount++;
}
我会注意到,我似乎很难在紧凑的代码和提供足够的信息之间取得良好的平衡。如果需要,我可以提供更多代码。插入树中已有的键时,将替换该节点的值。但是您没有退出带有return的函数,因此
将继续执行。由于temp->key
等于treeNode->key
,因此您可以输入else
和temp=temp->left代码>发生。然后,当执行超时时,您的代码实际上可能会生成错误的结构
解决方案是添加return
到实际进行替换的位置。替换值时为什么要更改sizeCount
?我更新了代码,因为sizeCount总是在函数末尾递增。压缩代码时错误地删除了一行。我还要注意,sizeCount虽然没有在问题区域中使用,但实际上总是显示正确的值。所以我得到了适当的替换和大小输出,但不是当它转换成一个列表时…所以当你制作列表时可能会发生错误?伙计,你完全不知道这有多神奇。现在已经快凌晨4点了,我从午夜开始一直在努力让代码正常工作。那一行的改变就做到了。请加上这个作为答案,我想选择它。谢谢,谢谢,谢谢!!