二叉树-根据先序遍历和中序遍历序列重建二叉树

目录

一、问题描述

二、解题思路

1.首先明确先序遍历和中序遍历的性质:

2.确定根节点及左右子树

3.对子树进行递归操作

4.递归返回条件

三、代码实现

四、刷题链接


一、问题描述

二、解题思路

1.首先明确先序遍历和中序遍历的性质:

        先序遍历(根节点、左子树、右子树)

        中序遍历(左子树、根节点、右子树)

2.确定根节点及左右子树

        第一次递归可以通过先序遍历序列确定根节点元素,然后去中序遍历序列中定位左子树和右子树序列(长度也相应的确定下来),左、右子树在两个序列中的起始位置和终止位置也可以确定下来,目的是对子树再次执行递归操作。

3.对子树进行递归操作

         对左子树:先序遍历序列第一个节点(作为左子树的根节点,此时根节点确定)对应中序遍历的最后一个节点,那么证明该左子树没有右子树,只有左子树,再次对左子树执行递归操作

        对右子树:先序遍历序列第一个节点(作为右子树的根节点,此时根节点确定),此时根据中序遍历确定本次递归左子树、右子树的起始终止范围,对左、右子树再次执行递归操作。

4.递归返回条件

当本次递归只剩一个节点,作为根节点确定下来,递归结束。

三、代码实现

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param preOrder int整型一维数组 
     * @param vinOrder int整型一维数组 
     * @return TreeNode类
     */
    public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) {
        if(preOrder.length==0){
            return null;
        }
        //初始化根节点
        TreeNode root=new TreeNode(-1);
        buildTree(preOrder,0,preOrder.length-1,vinOrder,0,vinOrder.length-1,root);

        return root;
    }
    //递归方式构建二叉树
    public void buildTree(int[] preOrder,int prestart,int preend,int[] vinOrder,int vinstart,int vinend,TreeNode root){
        int midval=preOrder[prestart];
        root.val=midval;
        if(vinstart==vinend){
            root.left=null;
            root.right=null;
            return;
        }

        int midvalIdx=vinstart;
        for(;midvalIdx<=vinend;midvalIdx++){
            if(vinOrder[midvalIdx]==midval){
                break;
            }
        }
        int leftsize=midvalIdx-vinstart;
        int rightsize=vinend-midvalIdx;
        if(leftsize==0){
            root.left=null;
            TreeNode rootright=new TreeNode(-1);
            root.right=rootright;
            buildTree(preOrder,prestart+1,preend,vinOrder,midvalIdx+1,vinend,rootright);
        }else if(rightsize==0){
            root.right=null;
            TreeNode rootleft=new TreeNode(-1);
            root.left=rootleft;
            buildTree(preOrder,prestart+1,preend,vinOrder,vinstart,midvalIdx-1,rootleft);
        }else{
            TreeNode rootleft=new TreeNode(-1);
            TreeNode rootright=new TreeNode(-1);
            root.left=rootleft;
            root.right=rootright;
            buildTree(preOrder,prestart+1,prestart+leftsize,vinOrder,vinstart,midvalIdx-1,rootleft);
            buildTree(preOrder,preend-rightsize+1,preend,vinOrder,midvalIdx+1,vinend,rootright);
        }
    }
}

四、刷题链接

重建二叉树_牛客题霸_牛客网

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索比特币多面体

目录 前言 一、比特币挖矿 1.挖矿设备的演化 2.矿池 二、比特币脚本 1.交易结构 2.交易的输入 3.交易的输出 4.P2PK 输入输出脚本的形式 实际执行情况 5.P2PKH 输入输出脚本的形式 实际执行情况 6.P2SH 输入输出脚本的形式 7.进一步说明 8.多重签名 9.脚本执…

Graphviz——安装、绘制可视化协议状态机(Python)

1、简介 Graphviz 是一个开源的图形可视化软件包&#xff0c;特别擅长绘制有向图和无向图等结构化图形。它非常适合用于生成各种图表&#xff0c;例如流程图、网络图、状态机图、层次结构图等。Graphviz 的主要组件 dot: 这是Graphviz最常用的布局程序&#xff0c;用于创建有向…

(杭州中科微)全星座定位导航模块GM32的应用推荐及性能指标解析

1、 关于GNSS的原理&#xff1a; 它是通过接收来自地球轨道上的W星信号&#xff0c;并利用信号传播延迟的原理&#xff0c;计算与接收器之间的距离&#xff0c;从而实现对接收器位置的精确测量。 而GNSS的定位原理&#xff1a;W星导航系统GNSS接收机主要是通过三边测量法&…

Postgresql配置SSL连接

1、系统需要有openssl、openssl-devel包 yum -y install openssl openssl-devel 2、查看当前数据库是否使用openssl编译 pg_config|grep CONFIGURE 如果没有重新编译 make clean make && make install 3、服务器端证书配置 服务器端需生成三个文件: root.crt(根证…

如何用stable diffusion画出这种风景幻视画?

最近出现了一种奇怪的表情包。 看到小图的时候有几个字&#xff0c;点看一看却是一张正常的图片。 比如&#xff0c;看一个有意思的图&#xff0c;这两张图的预览模式下有明显的“银河”两字。 点开放大呢&#xff1f; 竟然是服饰的形状和颜色。 再看一张类似效果的&#xf…

Java_JDK下载与环境变量配置

目录 一、JDK下载安装 二、安装后配置环境变量 三、在编辑器里使用JDK 一、JDK下载安装 JDK 是Java开发工具包&#xff0c;它提供了用于开发和运行Java程序所需的工具和库。JDK包括Java编译器、Java虚拟机、Java标准库等。在IDEA中使用Java语言编写代码时&#xff0c;需要安…

20240617通过串口配置索尼SONY的HDMI OUT输出的8530机芯

20240617通过串口配置索尼SONY的HDMI OUT输出的8530机芯 2024/6/17 15:54 缘起&#xff1a;需要在RK3588开发板OK3588-C上使用SONY的8530机芯。特意熟悉8530的串口命令&#xff01; 目的&#xff1a;需要配置SONY的8530机芯为RGB输出&#xff0c;4K分辨率。 串口波特率&#x…

Redis 管道

Redis的消息交互 当我们使用客户端对Redis进行一次操作时&#xff0c;如下图所示&#xff0c;客户端将请求传送给服务器&#xff0c;服务器处理完毕后&#xff0c;再将响应回复给客户端&#xff0c;这要花费一个网络数据包来回的时间。 如果连续执行多条指令&#xff0c;那就会…

Elixir学习笔记——编写文档

Elixir 将文档视为一等级别类。文档必须易于编写且易于阅读。在本指南中&#xff0c;您将学习如何在 Elixir 中编写文档&#xff0c;涵盖模块属性、样式实践和文档测试等结构。 Markdown Elixir 文档是使用 Markdown 编写的。网上有很多关于 Markdown 的指南&#xff0c;我们…

根据配置的参数规格生成商品SKU

参数规格如下&#xff1a; let specParam [[红色,绿色,白色,黄色], [大,小]]js部分&#xff1a; let getSpecParamCom (specData, index) > {for (let i 0; i < specData[index].length; i) {tempResult[index] specData[index][i];if (index ! specData.length - …

鸿蒙原生App开发之:套用混合app开发思路

2024年&#xff0c;似乎华为迎来了新的企业机遇--鸿蒙独立操作系统。 受到全球国际形势的影响&#xff0c;加之第四次科技革命&#xff08;AI革命&#xff09;冷不丁的出现&#xff0c;在他国AI技术领先的前提下&#xff0c;中国自主研发的独立操作系统再次提上新的战略高度。…

Javaweb08-JDBC数据库连接技术

JDBC数据库连接技术 **原理&#xff1a;**JDBC在应用程序与数据库之间起到了一个桥梁作用&#xff0c;当应用程序使用JDBC访问特定的数据库时&#xff0c;需要通过不同数据库驱动与不同的数据库进行连接&#xff0c;连接后即可对数据库进行相应的操作。 一.Jdbc API 1.Driver…

基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于It扩散过程的交易策略偏微分方程,提出了一种确定It扩散过程。通过根据的第一次通过时间来确定问题在这个过程中&#xff0c;我们推导出交易长度的分布函数和密…

Guava-EventBus 源码解析

EventBus 采用发布订阅者模式的实现方式&#xff0c;它实现了泛化的注册方法以及泛化的方法调用,另外还考虑到了多线程的问题,对多线程使用时做了一些优化&#xff0c;观察者模式都比较熟悉&#xff0c;这里会简单介绍一下&#xff0c;重点介绍的是如何泛化的进行方法的注册以及…

网线不通?瞅瞅这里----关于交叉网线的原理。

最近搞了个项目&#xff0c;UDP对接UDP&#xff0c;死活对接不上。 最后发现是交叉网线的事情&#xff0c;在此记录交叉网线的原理。 先说结论&#xff1a;不同设备用直连&#xff0c;相同设备用交叉网线 细说说 1.原理 网线的原理实际就是TX与RX对接。 正常一个设备同时有…

关于使用命令行打开wps word文件

前言 在学习python-docx时&#xff0c;想在完成运行时使用命令行打开生成的docx文件。 总结 在经过尝试后&#xff0c;得出以下代码&#xff1a; commandrstart "C:\Users\86136\AppData\Local\Kingsoft\WPS Office\12.1.0.16929\office6\wps.exe" "./result…

智能室内空气质量监测预警系统小程序设计说明书

智能室内空气质量监测预警系统小程序设计说明书 一、应用功能与系统设计 &#xff08;一&#xff09; 应用功能 该小程序设计的目的是为了配合环境监测吸顶灯,Mini空气监测仪等硬件设备实时数据展示与远程设备控制等功能&#xff0c;系统框架图如图1-1所示。用户可以从小程序…

生活好物:日常更精彩

我们的日用杂货店&#xff0c;是生活美学的聚集地。这里汇聚了各式各样的生活用品&#xff0c;每一件都蕴含着对生活的热爱与追求。 走进我们的日用杂货店&#xff0c;仿佛打开了一个充满生活气息的宝藏盒。从厨房的锅碗瓢盆&#xff0c;到浴室的洗漱用品&#xff0c;再到客厅的…

Excel和Word等工具小技能分享汇编(一)

这里汇集刘小生前期微信公众号分享的Excel和Word等工具小技能&#xff0c;为方便大家查看学习&#xff0c;刘小生对其进行分类整理&#xff0c;后期也会不定期整理更新&#xff0c;如有想学习交流或其他小技巧需求&#xff0c;欢迎留言&#xff0c;我们一起学习进步&#xff01…

免费 逼真:快手“可灵”后又一Sora级选手登场

就在今日&#xff0c;英伟达投资的旧金山初创公司 Luma AI 打出一手王牌&#xff0c;推出新一代 AI 视频生成模型 Dream Machine&#xff0c;可以文生视频&#xff0c;图生视频&#xff0c;人人免费可用。同时&#xff0c;Luma AI 称 Dream Machine 可以从文本和图像生成“高质…