3

也许之前被问过数百万次,但我根本无法理解这有什么问题。我不想在互联网上使用任何代码,所以我只是尝试对我的想法进行编程。这个或我的打印功能是错误的。下面的代码有什么问题吗?

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;
        }
    }
4

1 回答 1

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->rightif value < temp->data

还:

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

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

于 2012-04-18T18:23:17.547 回答