题目(二叉搜索树的后序遍历序列—牛客网)
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
算法思路
首先应该考虑两种特殊情况。只有一个节点和空树的情况时,也符合要求。
那么对于一个序列 S,它的最后一个元素就是根节点的值 x,除掉根之后,留下序列 T,再结合二叉搜索树(BST)的特性,可以将 T 分成两段,前一段(左子树)小于 x,后一段(右子树)大于 x,并且这两段依然也是合法的 BST 后序遍历,那么完美地满足递归的定义。
算法实现
复杂度分析
对于时间复杂度可以表示为T(n)=2xT(n-1)+O(n) ,O(n)是 for 循环占用的时间,两个子问题各占 T(n-1),那么解出的时间复杂度为 O(nlogn),空间复杂度取决于递归深度,为 O(logn)。
参考
<<剑指offer2>>