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

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

时间:2023-08-28 20:35:04浏览次数:45  
标签:遍历 idx Offer 33 len 二叉 搜索 post

题目链接: 剑指Offer 33. 二叉搜索树的后序遍历序列

题目描述:

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

解法思路:

既然是二叉搜索树,那就一定满足以下性质:

  • 左子树 < 根 < 右子树;
  • 在树的后序遍历中,根始终处于左右子树的最后;

因此每次递归时验证最后一个节点是不是合理的二叉搜索树根即可

代码:

func verifyPostorder(post []int) bool {
    if len(post) == 0 {
        return true
    }
    // 根节点
    rootVal := post[len(post)-1]
    idx := 0
    // 二叉搜索树的左子树都小于根
    for idx < len(post) && post[idx] < rootVal {
        idx++
    }
    left := idx
    // 二叉搜索树的右子树都大于根
    for idx < len(post) && post[idx] > rootVal {
        idx++
    }
    return idx == len(post)-1 && verifyPostorder(post[:left]) && verifyPostorder(post[left:len(post)-1])
}

标签:遍历,idx,Offer,33,len,二叉,搜索,post
From: https://www.cnblogs.com/lxing-go/p/17663305.html

相关文章

  • 二叉树的存储结构和操作算法
    二叉树的存储结构和操作算法二叉树的存储结构1.顺序存储结构(完全二叉树/满二叉树)2.链式存储结构(一般二叉树).顺序存储结构按照满二叉树的结点层次编号,然依次后储存在数组当中如果该二叉树中位置是空的再对应到数组中的时候就使用0来填充.二叉树顺序存储结构的缺点......
  • 第五章 树与二叉树
    一、二叉树链式存储结构 typedefstructBiTNode{ ElemTypedata; structBiTNode*lchild,*rchild; }BiTNode,*BiTree;遍历先序遍历递归版 voidPreOrder(BiTreeT) { if(T!=NULL) { visit(T);//访问根结点 PreOrder(T->lchild);//递归遍历左子树 Pr......
  • 二叉树的层序遍历
    /***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,TreeNoderight){......
  • InfluxDB转北京时间,rfc3339转北京时间
    一、InfluxDB中的时间格式influxDB支持三种时间格式:epoch_time、rfc3339_date_time_string和rfc3339_like_date_time_string。(1)epoch_time格式就是时间戳格式,我们一般使用的10位和13位,在influxdb中使用的时间戳是19位,单位是ns(纳秒)(2)rfc3339_date_time_string格式这种格式为......
  • Day33(2023.08.21)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  久事体育软件测试11:30--13:00   吃饭休息13:00  久事体育软件测试17:00      下班......
  • 树和二叉树的基本概念
    树和二叉树的基本概念树的定义树是一个递归的定义了,也就是说树中一个结点和其孩子结点都可以看成一个树.树有多种表示方式但是我们通常使用第一种递归的定义来表示树结构.树的基本术语根结点:非空树中没有前驱结点的结点.结点的度:结点拥有的子树数,也就是该结点向下直接......
  • 剑指Offer 32 - III. 从上到下打印二叉树
    题目链接:剑指Offer32-III.从上到下打印二叉树题目描述:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。解法思路:本题在一题的基础上,区分打印方向,加一个bool型的方向变......
  • 剑指Offer 32 - II. 从上到下打印二叉树 II
    题目链接:剑指Offer32-II.从上到下打印二叉树II题目描述:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。解法思路:本题与上题的唯一区别就是在输出的时候,要将同一层的数输出在一行,这就意味着你需要知道哪些数是在一行的;这里巧妙的利用求队列......
  • 剑指Offer 32 - I. 从上到下打印二叉树
    题目链接:剑指Offer32-I.从上到下打印二叉树题目描述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。解法思路:本题就是从考察二叉树的层序遍历,直接上代码:代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint......
  • 剑指 Offer 61. 扑克牌中的顺子(简单)
    题目:classSolution{public:boolisStraight(vector<int>&nums){sort(nums.begin(),nums.end());//首先要对数组进行排序intcount=0;//count用来记录万能牌0的个数,count相当于用来补牌for(auton:nums){if(n==0......