分段错误,c中的二叉搜索树

时间:2017-03-14 15:34:45

标签: c insert binary-search-tree

我想使用此函数将数据插入树中:

struct treeNode{
    data* val;
    struct treeNode *left, *right, *parent;
};


void insert(data *d, struct treeNode **leaf, struct treeNode **leaf_par)
{
    if( *leaf == 0 )
    {
        *leaf = (struct treeNode*) malloc( sizeof( struct treeNode ) );
        (*leaf)->val = d;
        /* initialize the children to null */
        (*leaf)->left = 0;
        (*leaf)->right = 0;
        /* initialize the parent */
        (*leaf)->parent = *leaf_par;  //here I receive segmentation fault
    }
    else if(strcmp(d->name, (*leaf)->val->name) < 0)
    {
        insert( d, &(*leaf)->left, &(*leaf) );
    }
    else if(strcmp(d->name, (*leaf)->val->name) > 0)
    {
        insert( d, &(*leaf)->right, &(*leaf) );
    }
}

主要是我:

struct treeNode *root = NULL;
data d1 = {"Smith"};
insert(&d1, &root, NULL);

存在分段错误:

(*leaf)->parent = *leaf_par;

第一次* leaf_par为NULL,我不知道为什么它没有正确运行。我该如何修复插入功能?没有“父”指针它很容易,但我必须用“父”做到这一点并且它不起作用。

1 个答案:

答案 0 :(得分:-1)

您正尝试取消引用NULL;不要这样做。

第一次插入的简单修复是:

insert(&d1, &root, &root);

更深入地插入递归将修复指针。