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

news2024/11/26 8:57:45

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

  • leetcode 106 题 从中序与后序遍历序列构造二叉树
  • 解题思路
  • 解题代码:
  • 二叉树专题

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

leetcode 106:从中序与后序遍历序列构造二叉树 原题链接
题目描述:

给定两个整数数组 inorder 和 postorder ,
其中 inorder 是二叉树的中序遍历,
postorder 是同一棵树的后序遍历,
请你构造并返回这颗 二叉树 。

示例:
在这里插入图片描述
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
输出:[3,9,20,null,null,15,7]

示例2:
输入:inorder = [-1], postorder = [-1]
输出:[-1]

提示:
1 <= inorder.length <= 3000
postorder.length == inorder.length
-3000 <= inorder[i], postorder[i] <= 3000
inorder 和 postorder 都由 不同 的值组成
postorder 中每一个值都在 inorder 中
inorder 保证是树的中序遍历
postorder 保证是树的后序遍历

解题思路

中序遍历: 左头右
后序遍历: 左右头
后序遍历的最后一个节点就是头节点,在中序遍历中刚好又把树分为左树和右树,
这就和根据前序和中序遍历构造二叉树是一样的了,
我们递归去构建这颗树就行了,

解题代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        return  process(inorder,0,inorder.length-1,postorder,0,postorder.length-1);
    }
    /**
    * 递归去组建树
    * is 是左子树起始位置,
    * ie 是左子树结束位置
    * ps 右子树起始位置
    * pe 右子树结束位置
    */
    public TreeNode process(int[]inorder,int is,int ie,int[]postorder,int ps,int pe){
    	//base case 
        if(is > ie || ps > pe){
            return null;
        }
        //根据后序遍历的头节点来去找中序遍历头节点位置,把数组分成左树和右树。
        int headVal = postorder[pe];
        int index = 0;
        for(int i = is; i <= ie;i++){
            if(inorder[i] == headVal){
                index = i;
                break;
            }
        }
        //左子树的长度
        int leftSize = index - is;
        TreeNode head = new TreeNode(headVal);
        head.left = process(inorder,is,index-1,postorder,ps,ps+leftSize-1);
        head.right = process(inorder,index+1,ie,postorder,ps+leftSize,pe-1);
        return head;
    }
}

二叉树专题

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

leetcode二叉树中的最大路径和

二叉树的序列化和反序列化

求两个节点的最低公共祖先

给定一棵二叉树的头节点,返回这颗二叉树中最大的二叉搜索子树的头节点

计算二叉树中最大的二叉搜索子树的大小(节点数量)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

342. 4的幂

342. 4的幂 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 342. 4的幂 https://leetcode.cn/problems/power-of-four/ 完成情况&#xff1a; 解题思路&#xff1a; 跟之前的一个丑数一样&#xff0c;循环条件就…

使用VSCode SSH公网远程连接本地服务器开发 - cpolar内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

MySQL-事件详解

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

本地Linux服务器安装MongoDB数据库【公网远程数据库】

文章目录 &#x1f449;关于作者&#x1f449;前言&#x1f61c;1. 配置Mongodb源&#x1f61c;2. 安装MongoDB&#x1f61c;3. 局域网连接测试&#x1f61c;4. 安装cpolar内网穿透&#x1f61c;5. 配置公网访问地址&#x1f61c;6. 公网远程连接&#x1f61c;7. 固定连接公网地…

基于Kubernetes的实战案例分享

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 本技术文档旨在分享一个基于Kubernetes&#xff08;简称K8s&#xff09;的实际应用案例。我们将介绍K8s集群的规模、部署架构&#xff0c;并详细说明该案例在生产环境中的实际应用。通过本文档&#xff0c;读者将能够了解…

elasticsearchelastic-head docker安装

Elasticsearch8.7.1 安装 拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.7.1创建elastic 网络 docker network create elastic执行创建 docker run --name esA --net elastic -p 9200:9200 -e ES_JAVA_OPTS"-Xms1g -Xmx1g" -it dock…

【笔记】微机原理及接口技术1 -- 微机基础与8086

微机基础 微机组成 下图展示了微型计算机的硬件系统基本结构 中央处理器(CPU): 负责执行计算机程序指令,进行数据运算和逻辑运算。 主存: 用于 storing 程序和数据,包括只读存储器 ROM 和随机存储器 RAM。 输入设备: 外部数据输入的途径,如鼠标、键盘、扫描仪等。 输出设备…

Hudi Flink SQL代码示例及本地调试

前言 之前在Flink Hudi DataStream API代码示例中总结了Hudi Flink DataStream API的代码及本地调试&#xff0c;并且在文中提到其实大家用Table API更多一些&#xff0c;但是我感觉Table API调试源码可能会比较难一点&#xff0c;因为可能会涉及到SQL解析&#xff0c;不清楚T…

【单片机 TB作品】基于STM32F103C8T6单片机的甲醛监测与报警系统

文章目录 原理图ZE08-CH2O甲醛传感器A9短信模块实物 原理图 ZE08-CH2O甲醛传感器 ZE08-CH2O是一种甲醛&#xff08;甲醛&#xff09;传感器&#xff0c;用于检测环境中的甲醛浓度。甲醛是一种有毒气体&#xff0c;广泛用于建筑材料、家具、地毯、化妆品和其他消费品的生产中。…

STM32单片机(三)第二节:GPIO输出练习(LED闪烁、LED流水灯、蜂鸣器)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

案例挑战——MVVM框架理解和实践

MVVM框架理解和实践 一、背景介绍二、 什么是MVVM架构&#xff1f;1.架构示意图2.MVVM概念总结3.实现VM的框架 三、通过案例来理解MVVM框架1.没有使用MVVM架构的程序2.使用了MVVM架构的程序3.对比 四、总结 一、背景介绍 最近正在做新版项目的MVVM架构的结合业务的具体落地&am…

报表控件FastReport使用指南——如何打开WebP格式的图片

FastReport 是功能齐全的报表控件&#xff0c;可以帮助开发者可以快速并高效地为.NET&#xff0c;VCL&#xff0c;COM&#xff0c;ActiveX应用程序添加报表支持&#xff0c;由于其独特的编程原则&#xff0c;现在已经成为了Delphi平台最优秀的报表控件&#xff0c;支持将编程开…

SWUST软件技术基础实验笔记

目录 前言 堆栈的操作 实验目的 实验要求 单链表操作 实验目的 实验要求 二叉树操作 实验目的 实验要求 查找与排序 实验目的 实验要求 查找算法 排序算法 实验总结 前言 软件技术基础实验分为四个部分&#xff0c;涵盖了堆栈的操作、单链表操作、二叉树操作以…

微前端——qiankun配置方法

什么是微前端 微前端是指存在于浏览器中的微服务&#xff0c;其借鉴了微服务的架构理念&#xff0c;将微服务的概念扩展到了前端。 如果对微服务的概念比较陌生的话&#xff0c;可以简单的理解为微前端就是将一个大型的前端应用拆分成多个模块&#xff0c;每个微前端模块可以…

Qt文件系统源码分析—第八篇QFileSystemWatcher

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

RK最强ARM系列之RK3588+AI+Ethercat(linux +xenomai+igh)实时解决方案

RK3588是瑞芯微新一代旗舰级高端处理器&#xff0c;具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU&#xff0c;内置6.0TOPs算力的NPU。 有五大技术优势 1. 内置多种功能强大的嵌入式硬件引擎&#xff0c;支持8K60fps 的…

5.29-kubernetes learning

文章目录 HomeGet StartedThe kubernetes network model First of all &#xff0c;we should understand the layout of this official website page. Home The Home chapter is that the official website has manuals for different versions of k8s ,and then generally…

chatgpt赋能python:Python中单词排序的方法—从入门到精通

Python中单词排序的方法—从入门到精通 Python是一门很流行的编程语言&#xff0c;它是一门被广泛使用的高级编程语言&#xff0c;为开发者提供了丰富的工具和库&#xff0c;在处理字符串、文本信息时也有着广泛的应用。本文主要介绍在Python中进行单词排序的方法。 什么是单…

python pycharm的安装教程

pycharm安装教程&#xff0c;超详细_皮小孩ls的博客-CSDN博客目录 前言 python的安装教程&#xff1a; 1.下载地址&#xff1a; 2. 安装 1&#xff09;customize installation 勾选 use 2&#xff09;.默认 . 3&#xff09;. 选择安装位置 4&#xff09;.耐心等待&…

【CSSpart4--盒子模型】

CSSpart4--盒子模型 网页布局的三大核心&#xff1a;盒子模型&#xff0c;浮动&#xff0c;定位网页布局的过程&#xff08;本质&#xff09;&#xff1a;盒子模型的组成四部分&#xff1a;边框&#xff0c;内容&#xff0c;内边距&#xff0c;外边距 一 、盒子边框border:1.1 …