2017-04-10 15 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);