我在写一个带搜索功能的二叉树。该函数应该带有一个参数x,它表示要搜索的值,一旦找到该值,确定它是否为叶。如果未找到该值,则搜索功能将返回false。如何找到二叉树的叶子?
这是我给了我一个seg故障,并且只给了我1到100的每个值的虚假回报。二叉树是initalized与100个值。
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 < 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>* ¤tNode, const T& x)
{
}
bool leaf(Node<T>* currentNode) const
{
if (currentNode != nullptr)
{
return ((currentNode->left == nullptr && currentNode->right == nullptr) ? true : false);
}
else
{
return true;
}
}
您在哪条线上遇到seg故障?您还假定二叉树是排序的(即,每个节点比左更大,更小或等于右)。你的函数是否接收到一个排序的二叉树? – CurlyCorvus
我按值按降序插入元素。 – Scholar
我的意思是[自我平衡树](https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree)。无论哪种方式,如果x位于不是叶的节点上,该函数将永远不会找到它,因为它只能为叶节点返回true。这不是一个完整的答案,但是你应该有一部分函数读取'if(x == currentNode-> data)return true;'(因为你正在寻找值x)。你应该单独修改seg错误并要求算法而不是仅仅倾销代码。 – CurlyCorvus