2017-12-31 256 views
-1

こんにちは私はバイナリ検索ツリーにノードを挿入するためにdeferenceを使用しようとしました。しかし、私は今私が挿入機能に詰まっていると思う。私は挿入機能を思い出すときに間違いを犯したと思う。だから、誰でも私のコードに何が間違っているのか教えてくれます。ありがとう。dereferenceを使用してC++バイナリ検索ツリー

struct BstNode { 
    int data; 
    BstNode *left; 
    BstNode *right; 
}; 


BstNode *GetNewNode(int); 

void Insert(BstNode **, int); 

void Insert(BstNode **root, int data) 
{ 
    if(*root == NULL){ 
     *root = GetNewNode(data); 
    } 
    else if(data <= root){ 
     Insert(*(root -> left), data); 
    } 
    else { 
     Insert(*(root -> right), data); 
} 

BstNode *GetNewNode(int data) 
{ 
    BstNode *newNode = new BstNode(); 
    newNode->data = data; 
    newNode->left = newNode->right = NULL; 
    return newNode; 
} 

int main() 
{ 
    BstNode *root = NULL; 

    Insert(&root,15); 
    Insert(&root,10); 
    Insert(&root,20); 

    return 0; 
} 
+0

あなたが意味することを詳しく説明できますか「つまらない」?コンパイラエラー?プログラムは動作しますが、決して停止しませんかコードを書く方法を理解できませんか? – 1201ProgramAlarm

+0

@Shawn W Wこの条件はelse if(data <= root){は意味がありません。 –

答えて

0

何を意味することは、次の

void Insert(BstNode **root, int data) 
{ 
    if (not *root) 
    { 
     *root = GetNewNode(data); 
    } 
    else if (data < (*root)->data) 
    { 
     Insert(&(*root)->left, data); 
    } 
    else 
    { 
     Insert(&(*root)->right, data); 
    } 
} 

は、あなたの関数の実装における条件の構文を使用してこの機能に条件の構文を比較して、すべてが明らかであろう。

は、例えば、このif文は、少なくとも2つのエラー

else if(data <= root){ 
     ^^^^^^^^^^^^ 
     Insert(*(root -> left), data); 
       ^^^^^^^^^^^^^^^ 

を持っており、コンパイラは、対応する診断メッセージを発行します。

+0

ありがとう、それは動作します。しかし、ここには &(* root) - >の意味は何ですか?ポインタのアドレスを取得しますか?私は混乱しています。そしてなぜここでInsert関数のルートの前に* 2つが必要ですか?あなたの助けをもう一度ありがとう。 –

+0

@ShawnWW元のノードへのポインタを変更するには、ポインタへのポインタを使用して参照渡しする必要があります。それ以外の場合、関数は元のノードのコピーを処理します。 –

+0

ありがとう、&(*ルート) - >左の意味は何かを説明するのに役立つことができますか? –

-1

そこには、あなたのコード内のいくつかのエラー エラーがあなたにも

まず、あなたは確認する必要があり、インサート機能 セカンドでノードを宣言する必要がありBSTを知りません表示されている場合は、それ以下のデータよりも大きいです ルートにあるデータと等しい場合は、それを挿入することができます 3番目にノードを挿入すると、作成したノードによってルートの右または左のポインタを接続する必要があります

関連する問題