36725


C言語で外部ファイルからを読み込みそのデータに基づいて２分探索木を作成しようとしているのですが、ノードの左右のポインタにアドレスが代入されません。

何が違っているのでしょうか？

[code]

    struct member{
        int num;
        char name[13];
        char profile[70];
        struct member *left;
        struct member *right;
    };
    
    typedef struct member tree_mbr;
    
[/code]

* * *
[code]

    do{
            tree_mbr newt;
            if ((check = fscanf(fp, "%d %s %s", &newt.num, newt.name, newt.profile)) != EOF){
                newt.left = NULL;
                newt.right = NULL;      
                start = tree(newt,start);
            }
        }while(check != EOF);
    
[/code]

* * *
[code]

    tree_mbr *tree(tree_mbr key, tree_mbr *t)
    {
       if(t == NULL) {  
           t = (tree_mbr *) malloc(sizeof(tree_mbr))
           *t = key;
       }else if(key.num < t->num){
           tree(key, t->left);
       }else if(key.num > t->num){
           tree(key, t->right);
       }
        return t;
    }
    
[/code]

* * *
[code]

    void print_tree(tree_mbr *t)
    {
    
        static int c = 1;
    
    
        if(t != NULL){
            print_tree(t->left);
            printf("%d %s %s\n", t->num, t->name, t->profile);
            print_tree(t->right);
        }
    
    
    }
    
[/code]


CC BY-SA 3.0
2017-07-27T06:25:39.993
36712
2017-07-27T10:27:59.243
2017-07-27T07:01:06.047
754
24600
question
c
C言語　２分探索木の左右ポインタがNULLになってしまう


ツリーの挿入部分の

[code]

    tree(key, t->left);
    ...
    tree(key, t->right);
    
[/code]

での返値が捨てられています。

[code]

    t->left = tree(key, t->left);
    ...
    t->right = tree(key, t->right);
    
[/code]

のように変更してみて下さい。


CC BY-SA 3.0
2017-07-27T10:27:59.243
36725
2017-07-27T10:27:59.243
5044
36712
answer