2017-04-10 11 views
-1

私はC++を使用してBSTを実装していますが、挿入機能を実装した後、ツリーにノードを1つしか挿入できないことがわかりました。ここでは、インサート機能の私の実装です...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);