今天我参加了一场面试,被要求编写一个程序,该程序接收一棵二叉树并返回 true(如果它也是二叉搜索树)否则返回 false。
我的解决方法1:执行中序遍历并在 O(n) 时间内存储元素。现在扫描元素的数组/列表,并检查第i个元素是否大于(i+1)个元素。如果遇到这种情况,请返回false并跳出循环。(这需要O(n)时间)。最后返回true。
但这位绅士希望我提供一个高效的解决方案。我尝试了但是不成功,因为要找出它是否是BST,我必须检查每个节点。
此外他建议我考虑使用递归。
我的解决方法2:如果对于任何节点N N->left < N且N->right > N,则BT是BST,以及N的左节点的中序继承者小于N,N的右节点的中序继承者大于N,左子树和右子树都是BST。
但这将变得复杂且运行时间似乎不好。如果你知道任何最优解,请帮忙。