题目来源:链接
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
5
/ \
2 6
/ \
1 3
示例 1:
输入: [1,6,3,2,5]
输出: false
示例 2:
输入: [1,3,2,6,5]
输出: true
代码实现:
def verifyPostorder(self, postorder: List[int]) -> bool:
stack,root = [],float("inf")
for i in range(len(postorder)-1,-1,-1):
if postorder[i] > root:
return False
while stack and postorder[i] < stack[-1]:
root = stack.pop()
stack.append(postorder[i])
return True
解题思路:
二叉搜索树的中序遍历是排好序的,且二叉搜索树的每个节点不重复
后序遍历:左|右|根,后序遍历镜像:右|左|根,后序遍历倒序:根|右|左,其实就是先序遍历的镜像
如果这个postorder能够经过这层循环的考验,满足postorder[i] < root,则是正确的后序遍历序列
stack是我们维持的单调栈
比如例子【5,6,2,3,1】是我们的后序遍历倒序
root = 无穷, stack = [] ---->root = 无穷, stack = [5,6]----->root = 5, stack = [2]----->root = [5], stack = [2,3]---->
root = 2, stack = [1]----->结束
本文介绍了如何判断一个整数数组是否为二叉搜索树的后序遍历序列。通过分析二叉搜索树的特性,特别是其中序遍历的有序性,结合单调栈或递归分治的方法,对输入序列进行验证。文章提供了解题思路和代码实现。
115

被折叠的 条评论
为什么被折叠?



