BST - 递归插入

时间:2012-05-06 02:03:50

标签: c data-structures

我为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); }
    }
} 

1 个答案:

答案 0 :(得分:4)

这可能不是唯一的问题,但你的行

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

出现在else的{​​{1}}子句中。换句话说,x在这里保证为NULL。