我的二叉搜索树程序停止工作(C)

时间:2013-12-09 12:12:55

标签: c binary-search-tree

由于某种原因,代码的插入部分无法正常工作。当我运行程序时它只是给出一个错误“bst.exe已经停止工作”,它发生在这个函数中。这部分代码的全部思想是ITERATIVELY插入一个新节点并更新根。

static NODE *insert_i(NODE *r, int x)
{
    NODE *leaf;

    if(r == NULL)
    {
        leaf = malloc(sizeof(NODE));
        leaf->left = NULL;
        leaf->right = NULL;
        leaf->val = x;
        count++;
        return leaf;
    }

    while(r)
    {
        if(r->val == x)
            return r;

        if(x < r->val && r->left != NULL)
            r = r->left;

        else if(x > r->val && r->right != NULL)
            r = r->right;
    }

    leaf = malloc(sizeof(NODE));
    leaf->left = NULL;
    leaf->right = NULL;
    leaf->val = x;
    count++;

    if(x < r->val)
        r->left = leaf;

    else
        r->right = leaf;

    return r;
}


void bst_insert(BST_PTR t, int x)
{
    t->root = insert_i(t->root, x);
}

1 个答案:

答案 0 :(得分:1)

此时,在循环之外

if(x < r->val)
    r->left = leaf;

else
    r->right = leaf;

r为NULL。因此,如果您访问r->val,它就会崩溃。

尝试跟踪父母,如下所示。

NODE *leaf;
NODE * par

while(r)
{
    if(r->val == x)
        return r;

    par = r;
    if(x < r->val && r->left != NULL)
        r = r->left;

    else if(x > r->val && r->right != NULL)
        r = r->right;
}

leaf = malloc(sizeof(NODE));
leaf->left = NULL;
leaf->right = NULL;
leaf->val = x;
count++;


if(x < par->val)
    par->left = leaf;

else
    par->right = leaf;

return r;