-2
void add_bst(struct node **tloc, int k, int v)
{
    struct node *nd;
    nd = search_bst(*tloc, k);
    nd = malloc(sizeof(struct node));
    nd->key=k;
    nd->value=v;
    nd->left=NULL;
    nd->right=NULL;
}

search_bstが正しく記述されていることは確かですが、この関数は動作しないようです。私は何が間違っているのですか?それが非常に明白なことなら申し訳ありませんが、私はC初心者です。

編集:ここにsearch_bstがあります:

struct node *search_bst(struct node *t, int k)
{
    while (t != NULL){
            if (t->key < k) t = t->right;
            else if (t->key > k) t = t->left;
            else return t;
    }
    return t;
}
4

2 に答える 2

1

ここで search_bst から結果を取得しています。

nd = search_bst(*tloc, k);

次に、ここで nd に再度割り当てています。つまり、以前の結果を指していないことを意味します。

nd = malloc(sizeof(struct node));

したがって、search_bst からの結果を破棄しています。

于 2013-02-20T14:31:43.443 に答える
1

あなたは検索します

    nd = search_bst(*tloc, k);

その後すぐに検索結果を破棄します

    nd = malloc(sizeof(struct node));

それがあなたが望むものだと確信していますか?
コードから検索を除外することもできます。

于 2013-02-20T14:34:21.180 に答える