今天我有一个面试,我被要求编写一个程序,它接受一个二叉树,如果它也是一个二叉搜索树则返回 true,否则返回 false。
我的方法1:执行有序遍历并将元素存储在 O(n) 时间内。现在扫描元素的数组/列表并检查第 i个索引处的元素是否大于第 (i+1)个索引处的元素。如果遇到这样的条件,则返回 false 并跳出循环。(这需要 O(n) 时间)。最后返回真。
但是这位先生希望我提供一个有效的解决方案。我尝试过,但没有成功,因为要确定它是否是 BST,我必须检查每个节点。
此外,他指出我要考虑递归。我的方法2:如果对于任何节点 N N->left 是 < N 和 N->right > N ,并且 N 的左节点的有序后继小于 N 并且有序后继,则 BT 是 BST N的右节点大于N,左右子树是BST。
但这将是复杂的,运行时间似乎并不好。如果您知道任何最佳解决方案,请提供帮助。