给你一个树的后序遍历集,判断其是否为二叉搜索树
给你一个树的后序遍历集,判断其是否为二叉搜索树
力扣链接:剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣(LeetCode) (leetcode-cn.com)
思路
已知后序遍历为:左子树->右子树->根结点,将其后序遍历结果数组反转后变为:根结点->右子树->左子树
如果其符合二叉搜索树的定义,那么它的右子树必然比根结点大,左子树必然比根结点小
我们使用一个单调栈(单调递增),对于根结点和右子树来说其满足单调栈的条件,对于左子树来说则不满足单调栈的条件,
当遇到数组元素小于单调栈顶部元素时,我们可知现在已经遍历到树的左子树部分,则弹出树的根结点和右子树,直到数组元素大于等于单调栈顶部元素
为什么要直到数组元素大于等于单调栈顶部元素,而不是直接清空单调栈,因为右子树的左子树也要比根结点大
对左子树进行同样的操作。
代码
1 | class Solution { |
例图:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 柳门竹巷!
评论