首页 > 其他分享 >【剑指 Offer】 33. 二叉搜索树的后序遍历序列

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

时间:2023-04-11 09:33:06浏览次数:43  
标签:idx recur Offer 33 右子 二叉 int postorder

【题目】

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

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

     5
    / \
   2   6
  / \
 1   3

示例 1:

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

示例 2:

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof

【思路】

从前往后判断,如果找到值比根(最后一个值)大的,说明这个数字开始就是右子树,之前就是左子树,然后递归判断,是不是右子树开始的所有值都比根大,是否每个左右子树都满足条件。

 

【代码】

class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return recur(postorder,0,postorder.length-1);

    }
    public boolean recur(int[] postorder,int i,int j){
        if(i>=j) return true;
        int idx = i;
        while(postorder[idx]<postorder[j]){
            idx++;
        } //当前面的数都小于根的时候,是左子树的结点
        int m =idx; //左子树找完了 m指向右子树的第一个值
        while(postorder[idx]>postorder[j]){
            idx++;
        }//这是右子树的结点,都要大于根
        // 判断1.右子树的结点是否都大于根
        // 递归判断左[i,m-1]右子树[m,j-1]的结点是否符合这个规律
        return idx==j&&recur(postorder,i,m-1)&&recur(postorder,m,j-1);
    }
   
}

 

标签:idx,recur,Offer,33,右子,二叉,int,postorder
From: https://www.cnblogs.com/End1ess/p/17305131.html

相关文章

  • 二叉树的顺序存储
    二叉树的顺序存储二叉树的存储形式按照二叉树的结点层次编号,然依次后储存在数组当中二叉树的抽象数据类型表示二叉树顺序存储结构的示意图例题二叉树顺序存储结构的缺点1.顺序存储结构的大小固定不能动态的变化2.如果如图上为右单支树一样浪费空间所以顺序存储结构......
  • day 39 96. 不同的二叉搜索树
    给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。dp[3],就是元素1为头结点搜索树的数量+元素2为头结点搜索树的数量+元素3为头结点搜索树的数量元素1为头结点搜索树的数量=右子树有2个元......
  • 剑指offer38(Java)-字符串的排列(中等)
    题目:输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例:输入:s="abc"输出:["abc","acb","bac","bca","cab","cba"] 限制:1<=s的长度<=8来源:力扣(LeetCode)链接:https://leetcode.cn/pr......
  • hdu-4533(线段树+区间合并)
    约会安排HDU-4553跟hdu-1540(线段树+区间合并)-魏老6-博客园(cnblogs.com)是一样,但是要写两个线段树。线段树维护,最长前缀pre,最长后缀suf,以及最大连续连续区间sum。1代表空,0代表时间被占了还有几个注意事项:当是DS时,只能查询和修改屌丝树;当是NS时,先判断屌丝树能不......
  • 3500/15 133292-01 到达时间预测解决方案阶段
    3500/15133292-01到达时间预测解决方案阶段今天,墨西哥的公共交通系统不具有提供信息来确定公共汽车的到达时间或者知道到达用户的公共汽车站的下一辆公共汽车上是否有空位的功能。这一信息与墨西哥城市密切相关,那里每天都有数百万用户需要移动。所提出的解决方案基于这样的事实......
  • 用 Go 剑指 Offer 12. 矩阵中的路径
    给定一个 mxn二维字符网格 board和一个字符串单词 word。如果 word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如,......
  • 用 Go 剑指 offer:面试题61. 扑克牌中的顺子
    从若干副扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为0,可以看成任意数字。A不能视为14。 示例 1:输入:[1,2,3,4,5]输出:True 示例 2:输入:[0,0,1,2,5]输出:True 限制:数组长度为5 数组的......
  • 用 Go 剑指 Offer 57. 和为s的两个数字 (双指针)
    输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 示例1:输入:nums=[2,7,11,15],target=9输出:[2,7]或者[7,2]示例2:输入:nums=[10,26,30,31,47,60],target=40输出:[10,30]或者[30,10] 限......
  • 用 Go 剑指 Offer 39. 数组中出现次数超过一半的数字 (摩尔投票)
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 //若不存在多数元素,本题就需要计数并判断示例 1:输入:[1,2,3,2,2,2,5,4,2]输出:2 限制:1<=数组长度<=50000来源:力扣(LeetCode)链......
  • LeetCode 530.二叉搜索树的最小绝对值差
    1.题目:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1来源:力扣(LeetCode)链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst著作权归领扣网络所......