二进制搜索树插入C ++

时间:2012-04-18 18:15:41

标签: c++ algorithm binary-search-tree

之前可能会问过几百万次,但我根本无法理解这有什么问题。我不想在互联网上使用任何代码,所以我只是试着编写我的想法。这个或我的打印功能是错误的。下面的代码有什么问题吗?

void addNode(int value)
    {
        Node* newNode=new Node;
        newNode->data=value;
        if(root==NULL)
            root=newNode;
        else {
            Node* temp=root,*parent;
            while(temp!=NULL)
            {
                parent=temp;
                if(temp->data == value)
                    return;
                else if(temp->data < value)
                    temp=temp->left;
                else 
                    temp=temp->right;
            }
            temp=newNode;
        }
    }

1 个答案:

答案 0 :(得分:6)

temp=newNode;

这会将指针指定给局部变量,该函数在函数返回时被丢弃,从而丢失新节点。相反,您希望将其分配给树中的指针;也许是这样的:

if (temp->data < value) {        // If the new node should be to the left
    if (temp->left) {            //   If there is a left subtree
        temp = temp->left;       //      Move into the left subtree
    } else {                     //   Otherwise
        temp->left = newNode;    //      Insert the new node there
        return;                  //      Done.
    }
}

同样适用于temp->right value < temp->data

此外:

if (temp->data == value) 
    return;

那里有内存泄漏;你应该在返回之前delete newNode