二进制搜索树有助于插入功能

时间:2013-11-25 00:12:04

标签: c++ binary-search-tree

我的插入函数编译得很好但是如果我尝试添加第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;
}

1 个答案:

答案 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