2016-10-27 12 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文で実行されます。私は何かを逃して何か間違っていると思う。この機能で

+1

である私は、デバッガを使用することになりますが、鉱山は、現時点では動作していません。デバッガでこれを実行し、あなたの調査結果を使って投稿を編集できますか? –

+1

パラメータ*をvalue *で渡すと、受信側で値を変更することはできません。呼び出し元の変数は変更されません。多分あなたは参照渡す必要がありますか? –

+0

'Tree :: root'は初期化されていません - ' nullptr'に設定するコンストラクタが必要です。 'insertNode()'は 'tree'パラメータを値で取るので、その関数でそれを変更しても効果はありません。 –

答えて

1

Tree insertNode(Node* tree,int val) ノードを変更できるように参照することによりノードポインタを渡す必要がありますので、正しいパラメータが
Tree insertNode(Node* &tree,int val)

+0

コメントをコピーしましたか? – Ruturaj

+0

もちろん、申し訳ありませんが、私はあなたのコメントを見ました。 – felit

+0

Wala Saifに感謝します。私は参考にしました。今それは動作します –

関連する問題