最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列 | 刷题打卡

    正文概述 掘金(徙倚何依)   2021-03-13   357

    前言

    已经刷了将近20道题,凭空想象出思路,还不通过想想前几道做题总结的经验。所以我觉得应该停下来去复习一下前面的题目,整理一下做题的套路。温故而知新。

    后序遍历定义: [ 左子树 | 右子树 | 根节点 ] ,即遍历顺序为 “左、右、根” 。

    二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。

    题目描述

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

         5
        / \
       2   6
      / \
     1   3
    

    示例 1:

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

    示例 2:

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

    解题思路

    1. 根据 二叉搜索树 的性质,左子树的节点的值 < 根节点的值,右子树相反
    2. 因此,根据 当前根节点的值,查询 第一个右子节点出现的下标,上一步中,左子树已经符合要求
    3. 因此,判断右子树的大小 是否满足条件若都满足条件,则表示 当前根的二叉搜索树性质满足,于是,我们再来 递归判断 其 左右子树是否满足

    AC代码

    var verifyPostorder = function(postorder) {
        let len = postorder.length;
        if(len <2) return true; // 只有一个元素必为后序遍历
        let root = postorder[len-1];// 后序遍历的最后一个元素为根节点
        let i = 0;
        for(;i < len -1; i++) {
            if(postorder[i] > root){// 即为root 的右子树
                break;
            }
        }
        // 判断左子树是否都小于root
        let result = postorder.slice(i, len - 1).every(item => item > root);
        if(result){ // 进行递归, 判断root的左右子树是否满足二叉树的性质。
            return verifyPostorder(postorder.slice(0,i)) && verifyPostorder(postorder.slice(i,len-1))
        }
        else {
            return false;
        }
    };
    

    总结:

    二叉搜索树定义: 左子树中所有节点的值 < 根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。 本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情


    起源地下载网 » 剑指 Offer 33. 二叉搜索树的后序遍历序列 | 刷题打卡

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元