2017-04-23 3 views
-1

を動作しません。 :バイナリツリーは、私は私自身のバイナリツリーを実装することだし、これは私のノード構造である印刷

void insert(int value, struct node *leaf) 
{ 
    if(leaf == NULL) 
    { 
     leaf = (struct node*) malloc(sizeof(struct node)); 
     leaf->value = value; 
     leaf->left = NULL;  
     leaf->right = NULL; 
    } 
    else if(value < leaf->value) 
    { 
     insert(value, leaf->left); 
    } 
    else if(value > leaf->value) 
    { 
     insert(value, leaf->right); 
    } 
} 

、これは私が木を訪問するために使用する機能です。

void print_tree(struct node * leaf){ 
    if(leaf == NULL) 
    return; 
    print_tree(leaf->left); 
    printf(" %d ",leaf->value); 
    print_tree(leaf->right); 
} 

問題は、すべての値を挿入すると何も印刷されないということです。

+0

あなたがここにカンマが欠落している: '(左>の値leaf-)を挿入;' –

+0

あなたが検索し、約読みたいと思うかもしれません* Cで参照することによりパスをエミュレート*。 –

+0

@BenSteffanそれはちょうどタイプエラーです、どうもありがとうございます。 –

答えて

1

私はあなたがこのように、インサートを呼び出していると仮定しています:

insert(5, start); 

問題は、このようにあなたが挿入機能のleafローカル変数にNULLをコピーしているということです。

したがって、ノードのメモリを割り当てる場合は、開始ポインタを更新していません。

これを行うには、insert関数(struct node ** leaf)でダブルポインタを使用する必要があります。

これは動作するはずです:

void insert(int value, struct node **leaf) 
{ 
    if((*leaf) == NULL) 
    { 
     (*leaf) = malloc(sizeof(struct node)); // You don't need casting 
     (*leaf)->value = value; 
     (*leaf)->left = NULL;  
     (*leaf)->right = NULL; 
    } 
    else if(value < (*leaf)->value) 
    { 
     insert(value, &(*leaf)->left); 
    } 
    else if(value > (*leaf)->value) 
    { 
     insert(value, &(*leaf)->right); 
    } 
} 
+0

ありがとうございます –

関連する問題