栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间:发布时间: 百科书网 趣学号

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

  • 划分左右子树: 遍历后序遍历的 [i,j] 区间元素,寻找 第一个大于根节点 的节点,索引记为 m 。此时,可划分出左子树区间 [i,m-1]、右子树区间 [m, j - 1] 、根节点索引 j
  • 使用子函数(左右子树对应的数组范围一直在变 定义low、high)
  • 定义p指针:从left开始,遍历左子树找出mid(mid=p),判断右子树(if(p!=right))
  • 检查左右子树
class Solution {
    public boolean verifyPostorder(int[] postorder) {
        return sub(postorder,0,postorder.length-1);

    }
    boolean sub(int[] postorder,int left,int right){
        if(left>=right){
            return true;//已经遍历结束了
        }
        int p=left;//从最开始遍历左右子树
        while(postorder[p]postorder[right]){//遍历右子树
            p++;
        }
        if(p!=right){//也就是说还没到根节点,右子树的遍历就中止了,即右子树中存在比根节点要少的
            return false;
        }
        return sub(postorder,left,mid-1)&&sub(postorder,mid,right-1);//右子树是道j-1
    }
}
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/293194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号