1

BST の再帰挿入アルゴリズムを作成しました。ただし、アルゴリズムにバグがあります。誰かが私にポインタを与えることができれば、それは大歓迎です。y = NULL最初の呼び出しではそれをしないでください。

    void insert_recursive(Node **root, Node *z, Node *y) {
    // z is the pointer to the node being inserted, and y keeps track of z's parent
    Node *x = *root;

    if (x != NULL) {
        y = x;
        if (z->val < x->val)
            insert_recursive(&(x->left), z, y);
        else
            insert_recursive(&(x->right), z, y);
    }
    else {
        if (y == NULL)
            { *r = z; printf("inserting root, %d\n", z->val); }
        else if (z->val < x->val)
             { y->left = z; printf("inserting left of %d, item %d\n", y->val, z->val); }
        else
            { y->right = z; printf("inserting right of %d, item %d\n", y->val, z->val); }
    }
} 
4

1 に答える 1

4

それだけが問題ではないかもしれませんが、あなたのライン

else if (z->val < x->val)

elseの節で発生しif (x != NULL)ます。つまり、ここではxがNULLであることが保証されています。

于 2012-05-06T02:41:55.590 に答える