从中序与后序遍历序列构造二叉树

题目链接

链接: 从中序与后序遍历序列构造二叉树

题目要求

解题思路

  1. 先在后序遍历数组中找到根节点
  2. 根据中序遍历中找到根节点的位置,在中序遍历中分割左子树和右子树
  3. 再回到后序中找到左子树的后序遍历和右子树的后序遍历

和从前序与中序遍历序列构造二叉树不同的是:

后序遍历的最后一个元素是根节点,因此从后序的最后一个下标向前遍历

从后向前遍历后序,得到的顺序顺序是 根 右 左,也就是镜像的前序遍历

此时就需要 先构建右子树,再构建左子树即可

代码实现

java 复制代码
class Solution {
    //记录 在后序中 遍历到到那个元素
    private int index = 0;
    private static int findPos(int[] arr, int val, int left ,int right) {
        for (int pos = left; pos < right; pos++) {
            if (arr[pos] == val) {
                return pos;
            }
        }
        return -1;
    }

    public TreeNode buildTree( int[] inorder,int[] postorder) {
        //每次使用需要重置 index 为末尾位置
        index = postorder.length - 1;
        return buildTreeHelper(inorder,postorder,0,inorder.length);
    }

    // left 和 right 为了在中序遍历中 ,分隔左子树和右子树的区间
    private TreeNode buildTreeHelper( int[] inorder ,int[] postorder, int left, int right) {
        //如果是空区间 就说明是空树
        if(left == right){
            return null;
        }
        TreeNode root = new TreeNode(postorder[index]);
        //指向前一个后序遍历元素
        index--;
        //在中序中,找到当前根节点的位置
        int pos =  findPos(inorder, root.val, left, right);
        //[pos+1, right) 是右子树区间
        root.right = buildTreeHelper(inorder,postorder,pos+1,right);
        //[left ,pos) 是左子树区间
        root.left = buildTreeHelper(inorder,postorder,left,pos);
        return root;
    }
} 
相关推荐
大文说跨境4 分钟前
亚马逊多账号管理浏览器怎么选?云登/紫鸟/AdsPower 对比
java·前端·自动化
CoderYanger19 分钟前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
顽疲40 分钟前
java springboot vue 养老系统源码详解:请假 care_leave 销假与床位停费日扣实践
java·vue.js·spring boot
XIAEE1 小时前
一个即时通讯项目是怎么长出来的:(Spring Boot 3 + Vue 3 微前端 + 悟空 IM + LiveKit)
java·spring
n87651 小时前
Playwright Java WEB UI 自动化实现框架与逻辑
java·前端·ui
Java_AI工程师1 小时前
Spring4 / SpringBoot1.x 老项目想接入 AI?不用升级框架!3 套无痛落地方案
java·人工智能·spring boot
BBmmo1 小时前
Java Stream 的 filter 为什么看起来没运行?
java
VimorphTech1 小时前
Java 文件缓存实战:如何避免读到未下载完成的视频?
java·spring boot
白露与泡影2 小时前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试
SL_staff2 小时前
JVS-APS 实践:用双向反馈闭环打破制造计划孤岛
java·spring cloud·全栈