2017-04-10 97 views
-1

我正在使用C++实现BST,但是在实现插入功能后,我发现我只能在树中插入一个节点。我试过许多办法来解决这个问题,但他们没有工作......C++ BST插入

这是我实现插入功能的:

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

感谢您对您的所有帮助。

回答

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);