为什么这种方法会导致我出现段错误?我试图根据我的 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;
}
}
}
如果您在此处逐步复制原始代码,那么我认为您错误地这样做:
assert(value != NULL);
我想你的意思是这样做:assert(node != NULL);
基本上你还没有实现node
NULL
的检查,当NULL
节点被取消引用时,它会导致Seg-Fault。