如何检查O(nlgn)中的二叉树是否是BST?

时间:2019-02-27 12:03:17

标签: algorithm tree binary-search-tree

我在练习中遇到一个问题,想提供一种算法来检查二叉树是否为BST。

它也想通过分而治之来解决它,所以我认为我的递归函数应该类似于 this:

T(n) = 2T(n/2) + O(n)

但是我不知道如何将合并部分设计为O(n)的顺序。

有人知道吗?

1 个答案:

答案 0 :(得分:4)

树遍历为 O(n)。列表的排序检查为 O(n) O(n)位于 O(n log n)中。

按照您的说法,合并部分应为 O(1),而不是 O(n),再次为您提供 O(n )总体解决方案:如果左子树是BST,右子树是BST,并且左子根小于根,并且根不大于右子根,则这棵树是BST:

T(n) = T(m) + T(n-m-1) + T(1)    where   m < n   is the count of the left subtree

加上对空子树的明显边缘处理。