【发布时间】:2019-08-28 22:38:09
【问题描述】:
我必须检查一棵树是否是二叉搜索树。我正在使用一个收集值的临时数组进行中序遍历。我必须检查数组是否按升序排列,如果是,则返回 true:
bool myisBST(Node* node, std::vector<int> v);
bool myisBST(Node* node)
{
return myisBST(node, std::vector<int>());
}
bool myisBST(Node* node, std::vector<int> v)
{
if (node)
{
if (node->left)
return myisBST(node->left, v);
v.push_back(node->data);
if (node->right)
return myisBST(node->right, v);
}
return std::is_sorted(v.begin(), v.end());
}
当二叉树是这样的:
50
/ \
25 75
/ \ / \
1 12 62 -99
如您所见,-99 使它不是二叉搜索树,但它仍然返回 true。我的实现有问题吗?
【问题讨论】:
-
-99使它不是二叉搜索树,但它仍然返回 true。您的实施有问题吗?对于可能出错的事情,您有更好的候选人吗? -
@juanchopanza 又来了?
-
在调试器中运行你的程序,看看它采用什么执行路径。您的代码永远不会命中 is_sorted 检查
-
你在问你的实现是否有问题。我在问这是否不是很明显。
标签: c++ binary-tree binary-search-tree