二叉搜索树的搜索功能出错

时间:2015-07-28 21:13:22

标签: c++

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);
    }
}

当我搜索不在二叉搜索树中的元素时,我遇到了分段错误。出了什么问题?

1 个答案:

答案 0 :(得分:2)

切换root->key == xroot == 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。