[AcWing]46. 二叉搜索树的后序遍历序列
[AcWing]46. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
数据范围
数组长度 [0,1000]。
样例
1 | |
算法思想
- 数组最后一个元素一定是根元素,然后
从左往右找到第一个比根元素大的下标,记为k。 - 左区间就是
[0, k - 1],右区间是[k, n - 1]。(n为数组长度) - 然后对子区间做同样的划分。
- 区间长度为1,则后续遍历序列合法。
- 只有包含
k的右区间可能会出现小于根节点的情况,因为左边已经在找k的过程中排除了非法情况(左区间中有比根节点大的元素)。
代码实现
1 | |
复杂度分析
- 时间复杂度
O(n<sup>2</sup>):dfs中有一个while循环,最坏情况会循环O(n)次,一共执行O(n)次dfs,所以时间复杂度是O(n<sup>2</sup>)。其实也就是退化成单链表了。 - 空间复杂度
O(n):退化成单链表空间占用O(n)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Phbeats-Blog!
评论







