剑指 Offer 33. 二叉搜索树的后序遍历序列

这篇博客介绍了如何通过递归算法判断一个给定的整数数组是否为二叉搜索树的后序遍历结果。文章首先定义了二叉搜索树的性质,然后详细解析了解题思路,包括递归过程中的关键条件检查。最后,给出了Python实现的解题代码,展示了如何分别对左右子树进行递归判断以确定后序遍历序列的正确性。
摘要由CSDN通过智能技术生成

剑指 Offer 33. 二叉搜索树的后序遍历序列

2022年6月13日


一、问题描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。

参考以下这颗二叉搜索树:

     5
    / \
   2   6
  / \
 1   3

示例 1:

输入: [1,6,3,2,5]
输出: false

示例 2:

输入: [1,3,2,6,5]
输出: true

提示:
数组长度 <= 1000

二、问题分析

  • 二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。
  • 使用递归分治的思想
  • 流程:在这里插入图片描述

三、解题代码

class Solution(object):
    def verifyPostorder(self, postorder):
        """
        :type postorder: List[int]
        :rtype: bool
        """

        def recur(i, j):
            if i >= j: return True
            p = i
            while postorder[p] < postorder[j]: p += 1
            m = p
            while postorder[p] > postorder[j]: p += 1
            return p == j and recur(i, m - 1) and recur(m, j - 1)

        return recur(0, len(postorder) - 1)

总结

使用递归分别对左右子树进行判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值