struct node *search(struct node *root, int x)
{
if(root->key == x || root == NULL)
{
return root;
}
if(x < root->key)
{
return search(root->left, x);
}
else
{
return search(root->right, x);
}
}
当我搜索不在二叉搜索树中的元素时,我遇到了分段错误。出了什么问题?
答案 0 :(得分:2)
切换root->key == x
和root == NULL
以利用||
运算符中的短路。你想要检查它是不是 null,然后只有 尝试从中获取属性。
现在,当您在没有孩子的节点上找到search
时会发生什么?您可以获得search(root->left, x);
或search(root->right, x);
,这两者都相当于search(NULL, x);
。
此时,第一个if
语句变为if (NULL->key == x || NULL == NULL)
。 NULL->key
是空指针的解引用,导致seg-fault。