我的插入函数编译得很好但是如果我尝试添加第4个节点,它只是替换第一个子节点之一,而不是向这些子节点添加新节点。
bool bst::insert(string StudentName, int IDNumber) {
class node *temp = root;
class node *n=new node (StudentName, IDNumber);
if (root==NULL) {
root = n;
return true;
}
if (temp -> ID == n->ID)
return false;
while (temp) {
if (n-> ID < temp-> ID)
{ temp -> left = n;
temp -> left -> parent= temp;
temp = temp -> left;
return true;
}
else
{
temp->right=n;
temp -> right ->parent=temp;
temp = temp -> right;
return true;
}
}
return false;
}
答案 0 :(得分:1)
代码中的问题在while
循环中。循环只运行一次,因为在这两种情况下你总是return
。因此,您只能添加3个节点(或更少,取决于值),并且您实际上从未检查节点是否已存在。
要解决此问题,您必须更改代码才能执行以下操作:
while (temp) {
if (n-> ID < temp-> ID)
{
if(temp->left)
temp = temp->left
else
{
temp -> left = n;
temp -> left -> parent= temp;
return true;
}
}
else
{
// Analogously as for left
}
}
return false; // This should never happen, but we have to return...
我必须承认,找到答案wasn't hard