我在练习中遇到一个问题,想提供一种算法来检查二叉树是否为BST。
它也想通过分而治之来解决它,所以我认为我的递归函数应该类似于 this:
T(n) = 2T(n/2) + O(n)
但是我不知道如何将合并部分设计为O(n)
的顺序。
有人知道吗?
答案 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
加上对空子树的明显边缘处理。