前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-面试题33-二叉搜索树的后序遍历序列

LeetCode-面试题33-二叉搜索树的后序遍历序列

作者头像
benym
发布2022-07-14 15:08:58
1950
发布2022-07-14 15:08:58
举报
文章被收录于专栏:后端知识体系后端知识体系

# LeetCode-面试题33-二叉搜索树的后序遍历序列

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

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

代码语言:javascript
复制
     5
    / \
   2   6
  / \
 1   3

示例1:

代码语言:javascript
复制
输入: [1,6,3,2,5]
输出: false

示例2:

代码语言:javascript
复制
输入: [1,3,2,6,5]
输出: true

提示:

  1. 节点总数 <= 1000

# 解题思路

递归:

二叉树中根节点的左节点始终比根节点小,右节点始终比根节点大,题目中数组末尾为根节点

通过与root节点的大小比较,能够找到左子树的边界,从而划开左右子树

在右子树中节点值始终比root节点大,如果不是,则这个序列不是后序遍历序列

当找到划分边界后进行递归,判断左子树中哪些是左节点,哪些是又节点。右子树同理

# Java代码

代码语言:javascript
复制
class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return helper(postorder,0,postorder.length-1);
    }

    public boolean helper(int[] postorder,int start,int end){
        if(start>=end) return true;
        int i = 0;
        for(i=start;i<end;i++){
            if(postorder[i]>postorder[end])
                break;
        }
        for(int j = i;j<end;j++){
            if(postorder[j]<postorder[end])
                return false;
        }
        return helper(postorder,start,i-1)&&helper(postorder,i,end-1);
    }
}

# Python代码

代码语言:javascript
复制
class Solution:
    def verifyPostorder(self, postorder: List[int]) -> bool:
        length = len(postorder);
        if not postorder:
            return True
        root = postorder[-1]
        # 二叉树中左子树始终比根节点小,右子树比根节点大
        # 寻找左子树边界
        i = 0
        for i in range(length):
            if postorder[i]>root:
                break;
        j = i
        for j in range(j,length):
            if postorder[j]<root:
                return False
        # 判断左子树是不是二叉搜索树
        left = True
        if i>0: left = self.verifyPostorder(postorder[:i])
        # 判断右子树是不是二叉搜索树
        right = True
        if i<length-1: right = self.verifyPostorder(postorder[i:-1])
        return left and right
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # LeetCode-面试题33-二叉搜索树的后序遍历序列
    • # 解题思路
      • # Java代码
        • # Python代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档