C ++ BST插入

时间:2017-04-10 07:12:36

标签: c++ recursion binary-search-tree insertion

我正在使用C ++实现BST,但在实现了insert函数之后,我发现我只能在树中插入一个节点。我已经尝试了很多方法来解决这个问题,但是他们没有解决问题...

这是我对insert函数的实现:

void BSTree::insertHelper(Customer* customer, Node* currentNode, Node* parent)
{
    if (currentNode == NULL)
    {
        Node* newNode = new Node(customer);

        currentNode = newNode;
        newNode->setParent(parent);

        return;
    }

    if (*customer < *currentNode->getCustomer())
        insertHelper(customer, currentNode->getLeft(), currentNode);
    else insertHelper(customer, currentNode->getRight(), currentNode);
}

bool BSTree::insert(string lastName, char initial, int account)
{
    Customer* customer = new Customer(lastName, initial, account);

    if (isEmpty())
    {
        Node* newNode = new Node(customer);

        root = newNode;

        return true;
    }

    Node* currentNode = root;
    insertHelper(customer, currentNode, NULL);

    return true;
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你泄漏了内存。请看insertHelper

if (currentNode == NULL)
{
    Node* newNode = new Node(customer);

    currentNode = newNode;
    newNode->setParent(parent);

    return;
}

currentNode是一个局部变量。它仅存在于insertHelper内。因此,如果您指定它,那么当您返回时,它不会反映在函数外部。您传递父项,因此请指定其左侧或右侧成员:

newNode->setLeft(parent);
// or
newNode->setRight(parent);