2016-10-27 2 views
1

이 코드를 작성했습니다. 그러나 그것은 가치를 삽입하고 인쇄하지 않습니다. 누구든지 문제를 확인하고 말할 수 있습니까?C++ 트리에서 값을 삽입 할 수 없습니다.

struct Node{ 

    int value; 
    Node* left; 
    Node* right; 
}; 

class Tree { 

Node* root; 

public: 
Tree insertNode(Node* tree,int val) 
{ 
    if(tree==NULL) 
    { 
    tree = new Node; 
    tree->value=val; 
    tree->left=NULL; 
    tree->right=NULL; 

    } 
    else if (val<=tree->value){ 
    insertNode(tree->left,val); 
    } 
    else 
    { 
     insertNode(tree->right,val); 
    } 

    return *this; 
} 


insert(int val) 
{ 
    insertNode(root, val); 

} 

void printTree(Node* root) 
{ 


    if(!root) 
    { 
     cout<<"Tree is empty"<<endl; 
     return; 
    } 

    printTree(root->left); 
    cout<<root->value; 
    printTree(root->right); 


} 


print() 
{ 
    printTree(this->root); 
} 


}; 



int main(){ 


Tree* Nodd = new Tree(); 
Nodd->insert(12); 
Nodd->insert(10); 
Nodd->print(); 


} 

이 프로그램을 실행하면 insertNode 함수의 첫 번째 if 문에서 실행됩니다. 나는 뭔가를 놓치고 뭔가 잘못하고 있다고 생각한다. 올바른 매개 변수가
Tree insertNode(Node* &tree,int val)

+1

내가 디버거를 사용하는 것입니다 있도록 참조하여 노드의 포인터를 전달한다이 함수에서 –

+1

매개 변수 *를 값 *으로 전달할 때 수신 측에서는 값을 변경할 수 없습니다. 호출자의 변수는 변경되지 않습니다. 아마 당신은 참고로 통과해야합니까? –

+0

'Tree :: root'는 초기화되지 않았습니다.'nullptr'로 설정하는 생성자가 있어야합니다. 'insertNode()'는'tree' 매개 변수를 값으로 취합니다, 그래서 그 함수에서 그것을 수정하는 것은 아무런 효과가 없습니다. –

답변

1

Tree insertNode(Node* tree,int val)

는 노드를 수정할 수 있습니다,하지만 내 순간에 작동하지 않습니다 . 디버거를 통해 이것을 실행하고 결과를 사용하여 게시물을 편집 할 수 있습니까?
+0

그냥 내 의견을 복사 했습니까? – Ruturaj

+0

물론 아닙니다. 죄송 합니다만 방금 귀하의 의견을 보았습니다. – felit

+0

감사합니다. Wala Saif. 나는 참조로 통과했다. 이제 효과가있다. –

관련 문제