c语言中的二叉搜索树

c语言中的二叉搜索树,c,insert,binary-search-tree,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{
    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) );
    }
}
是否存在以下问题:

(*leaf)->parent = *leaf_par;

第一次*leaf_par为空,我不知道为什么它不能正确运行。如何修复插入函数?没有“parent”指针很容易,但我必须用“parent”来做,它不起作用

您正在尝试取消对NULL的引用;不要那样做

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

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

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

显然,您正在为
**leaf\u par
传递
NULL
,但尝试
*leaf\u par
访问,因此出现了故障。在这种情况下,您希望家长是什么样的人?您需要检查该案例并进行相应设置。
insert(&d1, &root, &root);