我正在编写一个二叉搜索树,这个名为Search的函数接受一个值x并搜索树中的节点并返回它是否是一个叶子。
bool search(Node<T>* ¤tNode, 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 < binTree<T>::root->data)
{
if ((leaf(currentNode)) == true)
{
return true;
}
else
{
search(currentNode->left, x);
}
}
//Right Subtree Search
else if (x >= binTree<T>::root->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
bool leaf(Node<T>* currentNode) const
{
return ((currentNode->left == nullptr && currentNode->right == nullptr) ? true : false);
}
当我使用新的更新节点递归调用搜索功能时,会发生seg错误。二叉树初始化为100个值,并从根开始搜索。
答案 0 :(得分:0)
你必须申报
bool leaf(Node<T>* currentNode) const
之前搜索
在搜索功能之前轻松修复,复制并粘贴bool leaf(Node<T>* currentNode) const;
答案 1 :(得分:0)
此代码
if (x < binTree<T>::root->data)
正在检查root
,请注意currentNode,因此测试永远不会改变。因此,如果您的x
值小于root->data
,您将继续尝试通过currentNode->left
递归,直到您遇到一片叶子(如果幸运的话)或者您点击了一个留空的节点指针,在这种情况下,您将currentNode
递归为NULL,这会在leaf
尝试检查currentNode->left
时导致段错误
您应该检查currentNode
。您还应该返回search
递归调用的返回值