C++ 如何找到二叉树的叶子?

C++ 如何找到二叉树的叶子?,c++,pointers,search,recursion,binary-tree,C++,Pointers,Search,Recursion,Binary Tree,我正在写一个带有搜索功能的二叉树。函数应该取一个参数x,它表示要搜索的值,一旦找到它,就确定它是否是叶。如果未找到该值,搜索函数将返回false 这是我得到的,它给了我一个seg错误,只是给了我从1到100的每一个值的错误返回。二叉树用100个值初始化 bool search(Node<T>* &currentNode, const T& x) const { //~ cout << "CURRENT NODE DATA: " << c

我正在写一个带有搜索功能的二叉树。函数应该取一个参数x,它表示要搜索的值,一旦找到它,就确定它是否是叶。如果未找到该值,搜索函数将返回false

这是我得到的,它给了我一个seg错误,只是给了我从1到100的每一个值的错误返回。二叉树用100个值初始化

bool search(Node<T>* &currentNode, const T& x) const
{
    //~ cout << "CURRENT NODE DATA: " << currentNode->data << "   :   ";


    /*  FUNCTION: Searches for variable that is passed in X and checks if this value is a leaf or not */

    //Left Subtree Search
    if (x < currentNode->data)
    {

    if ((leaf(currentNode)) == true)
        { 
          return true;
        }
    else 
    {
    search(currentNode->left, x);   

    }

    }


//Right Subtree Search
else if (x >= currentNode->data)
{

    //If node in right subtree is a node check 
    if ((leaf(currentNode)) == true)
    {
        return true;
    }   

    else 
    {
    search(currentNode->right, x);
    }

}




 //Return false if the node is not a leaf
 return false;

}  //END OF SEARCH FUNCTION



void remove(Node<T>* &currentNode, const T& x)
{

}

bool leaf(Node<T>* currentNode) const 
{
    if (currentNode != nullptr)
    {
    return ((currentNode->left == nullptr && currentNode->right == nullptr) ? true : false);        
    }
    else 
    {
        return true;
    }
}
bool搜索(节点*¤tNode,常量T&x)常量
{
//~cout left,x);
}
}
//右子树搜索
如果(x>=currentNode->data),则为else
{
//如果右子树中的节点是节点检查
if((叶(当前节点))==true)
{
返回true;
}   
其他的
{
搜索(当前节点->右侧,x);
}
}
//如果节点不是叶,则返回false
返回false;
}//搜索函数结束
无效删除(节点*&当前节点,常量T&x)
{
}
布尔叶(节点*当前节点)常数
{
if(currentNode!=nullptr)
{
返回((currentNode->left==nullptr&¤tNode->right==nullptr)?true:false);
}
其他的
{
返回true;
}
}

在搜索功能中,您可以在不查看子节点是否为nullptr的情况下访问子节点。。。然后您仍然尝试取消引用数据元素,而不检查null。

此外,当
currentNode
nullptr
时,
leaf
函数返回true,假设
search
中的
nullptr
检查已解决。这是指针指向不存在的叶的行为吗?

在哪一行出现seg错误?您还假设二叉树已排序(即,每个节点大于左、小于或等于右)。你的函数收到排序的二叉树吗?我按值的降序插入元素。无论哪种方式,如果x位于非叶节点上,函数将永远找不到它,因为它只能为叶节点返回true。这不是一个完整的答案,但是如果(x==currentNode->data)返回true,那么应该有函数的某个部分读取
(因为您正在搜索值x)。您可能应该将修复seg故障和请求算法分离开来,而不仅仅是转储代码。如果左、右子级都是空指针,则叶函数也会返回true。我使用十进制运算符返回true或false。也许表达式有问题,它永远不会返回true?@Revoo我的看法是,
search
函数应该有两个基本情况,否则就会出现问题。这两个问题已经在评论和回复中提到。在更新代码、测试代码并随后更新问题详细信息之后,我们其他人可能会有更多的内容需要审查和帮助。