[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!
评论