为什么这种方法会导致我出现段错误?根据我的C经验,我试着用几种方式重新写这个,但仍然没有什么好事发生。
TreeNode *Find_parent(TreeNode *node, int value)
{
assert(value != NULL);
if(node->value == value) {
return NULL;
}
if(node->value > value) {
if(node->left != NULL) {
if(node->left->value == value) {
return node;
} else {
return Find_parent(node->left, value);
}
} else {
return NULL;
}
} else {
if(node->right != NULL) {
if(node->right->value == value) {
return node;
} else {
return Find_parent(node->right, value);
}
} else {
return NULL;
}
}
}
答案 0 :(得分:1)
如果您在此处逐步复制原始代码,那么我认为您错误地执行了此操作:
assert(value != NULL);
我认为你打算这样做:assert(node != NULL);
基本上,您尚未对node
NULL
进行检查,当NULL
节点被取消引用时,会导致Seg-Fault。