2017-04-10 5 views
-1

Je suis en train d'implémenter un BST en utilisant C++, mais après avoir implémenté la fonction insert, j'ai trouvé que je ne pouvais insérer qu'un seul noeud dans l'arbre. J'ai essayé plusieurs façons de résoudre le problème, mais ils n'a pas marché ...CST BST insertion

Voilà mon implémentation de la fonction d'insertion:

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

Merci pour tous vos aide.

Répondre

0

Vous fuyez la mémoire. Regardez ici à insertHelper:

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

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

    return; 
} 

currentNode est une variable locale. Il n'existe qu'à l'intérieur insertHelper. Donc, si vous lui attribuez, cela ne sera pas reflété en dehors de la fonction lorsque vous revenez. Vous passez le parent le long, alors assignez à son membre gauche ou droit:

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