2013-07-09 2 views
0

이진 검색 트리를 구축 중입니다. 이제 트리에 노드를 추가하는 데 문제가 있습니다.이진 검색 트리에 노드 추가 C++

void BinaryTree::add(int value, Node* node) { 
    if(!node) 
     node = new Node(value); 
    else if(node->key < value) 
     this->add(value, node->rightNode); 
    else if(node->key > value) 
     this->add(value, node->leftNode); 
} 

이 코드는 내가 전화 할 때 작동하지 않습니다

BinaryTree test; 
test.add(4, test.root); 
test.add(1, test.root); 
test.add(5, test.root); 
test.add(2, test.root); 
test.add(3, test.root); 
test.add(7, test.root); 
test.add(6, test.root); 

를 처음 추가 호출 후, 트리 '테스트'의 뿌리는 여전히 비어 있습니다. add를 호출하고 노드가 트리의 올바른 위치로 이동하면 코드가 업데이트되도록 코드를 변경해야합니까? 대단히 감사합니다!

+0

참조로 '노드 *'를 전달할 수 있습니다. –

+0

예, 감사합니다. @ShafikYaghmour – Ra1nWarden

답변

1

현재 값으로 Node * 전달됩니다

void BinaryTree::add(int value, Node *& node) { 
            ^

당신이 기능이 단지의 사본을 수신 값으로 전달하는 경우 :

void BinaryTree::add(int value, Node* node) { 

하나의 솔루션 대신 참조로 전달하는 것입니다 Node *이며 이에 대한 수정 사항은 호출 코드에 반영되지 않습니다.

또한 valuekey 일 때 발생하는 상황에 대해 생각해보십시오.

+0

고마워요! 다른 질문이 있는데, 포인터를 값으로 전달하면 복사 된 포인터가 같은 객체를 가리 키지 않습니까? – Ra1nWarden

+0

@ Ra1nWarden 네, 같은 객체를 가리킬 것입니다. 따라서 객체를 수정하면 변경 사항이 반영되지만 포인터 자체에 대한 수정은 반영되지 않습니다. –

+0

나는 본다. 네, 저는 열쇠가 지금은 별개라고 가정하고 있습니다. – Ra1nWarden

0

당신은 재귀 적으로 add 함수를 호출하지만, 실제로 거기에서 전달 된 노드에 실제로 leftNode 또는 rightNode를 할당하는 것을 보지 못합니다.

+0

node 매개 변수가 올바르게 선언 된 경우 leftNode 또는 rightNode가 다음 재귀의 기본 대소 문자에 추가됩니다. – djf

관련 문제