【发布时间】:2017-03-14 15:34:45
【问题描述】:
我想使用这个函数向树中插入数据:
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,我不知道为什么它没有正确运行。我应该如何修复我的插入功能?没有“父”指针很容易,但我必须用“父”来做到这一点,它不起作用。
【问题讨论】:
-
显然,您正在为
**leaf_par传递NULL但尝试*leaf_par访问,因此是错误的。在这种情况下,您希望父母是什么?您需要检查该情况并进行相应设置。
标签: c insert binary-search-tree