2016-05-03 17 views
-4

私はバイナリ検索ツリーとbstのノードを表す2つの構造体を持っています。最初に出力が期待どおりのときにaddメソッドを呼び出します:tree is null、それはまだですか:tree is null私は2回目を呼び出した後ですか?構造体のポインタはまだメモリを割り当てた後でnullです

パラメータとしてaddメソッドにbst全体を送信すると動作します。

#include <iostream> 

using namespace std; 

struct node 
{ 
    int data; 
    node* right = NULL; 
    node* left = NULL; 
}; 

struct bst 
{ 
    node* root = NULL; 
}; 



void add(node* tree) 
{ 

    if (tree == NULL) 
    { 
     cout << "Tree is NULL "<<endl; 
     tree = new node; 
    } 
    else cout << "Not NULL"<<endl; 
} 

int main() 
{ 
    bst* tree = new bst; 
    add(tree->root); 
    add(tree->root); 
    system("pause"); 
    return 0; 

} 
+1

をこれはC.ではなく、C++で、あなたがすべき'NULL'マクロを使わず、' nullptr'キーワードを使います。 – Olaf

+1

あなたは参照によって 'tree'ポインタを渡していません... – LogicStuff

+0

あなたは値でポインタを渡しています – user463035818

答えて

0

あなたはそのアドレスの代わりにノード自体を渡しています。 あなたはこのようなポインタのアドレスとしてそれを宣言しない限り、

void add(node** tree) 
{ 
    if (*tree == NULL) 
    { 
     cout << "Tree is NULL "<<endl; 
     *tree = new node; 
    } 
    else cout << "Not NULL"<<endl; 
} 

int main() 
{ 
    bst* tree = new bst; 
    add(&(tree->root)); 
    add(&(tree->root)); 
    system("pause"); 
    return 0; 
} 
+0

彼は実際にノードのアドレスを渡しています。 – user463035818

1

を試してみてくださいあなたがバック機能のうち、ツリーを渡すことはできません。

void add(node** tree) { 
     if (tree == NULL) { 
      return; 
     } 
     if (*tree == NULL) { 
      cout << "Tree is NULL " << endl; 
      *tree = new node; 
     } else { 
      cout << "Not NULL" << endl; 
     }  
    } 
関連する問題