剑指Offer-04.重建二叉树

别再手动折腾了!PICO Unity SDK 一键配置开发环境保姆级教程(含PDC串流调试) 本文详细介绍了PICO Unity SDK的一键配置功能,帮助开发者快速搭建VR开发环境。通过自动化配置流程,大幅减少手动设置时间,提升开发效率。文章还涵盖了PDC串流调试技巧和常见问题解决方案,是PICO VR开发的实用指南。 阅读详情

重建二叉树

题目

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路

1. 递归

抓住核心找根节点
综合上面的介绍树的遍历方式,我们发现前序遍历的第一个节点必然是这棵树的根节点。而在中序遍历中,由于其特殊的访问顺序规则根节点总是在中间,处于根节点左边则是左子树的节点集合,而处于根节点右边则是右子树的节点集合。所以我们根据根节点找出左右子树后,又可以对左右子树按照同样的思路来处理。因此此处采用递归非常合适。
下面我们结合例子,简单复述一下上面的处理过程。
前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}。

  1. 根据前序遍历的第一个节点,我们可以知道这课树的根节点为1.
  2. 然后我们在中序遍历中找到我们的根节点1所处的位置,position = 3
  3. 我们得出根节点1的左子树节点集合为{4,7,2}。右子树的节点集合为{5,3,8,6}
  4. 接下来我们处理左子树,同样根据前序遍历可知左子树集合4,7,2的根节点为2,因为树的前序遍历的第一个节点必为根节点呀。
  5. 然后我们在中序遍历中找到我们的根节点2所处的位置,position = 2
  6. 我们得出根节点2的左子树节点集合为{4,7}。右子树的节点集合为为空,说明该节点没有右子树。
  7. 之后我们继续按如下的操作的处理左子树集合{4,7}
    ………

按照以上步骤,最终就会重构出我们的二叉树。这里可以发现只要子树的区间大小变为0了,说明父节点没有对应的子树,因此就不必继续递归处理,而是开始回溯。还有一点,我们是按照先左后右的递归处理,所以前序遍历中的每次都是按顺序去取来作为根节点的。所以可以用一个全局的index来控制前序的访问位置即可。我们只需关注中序遍历中每次划分的区间大小即可。

public class Solution {

    static int index;

    public static TreeNode reConstructBinaryTree(int[] pre, int[] in) {
        index = 0; //必须加这行,否则会失败,是答题系统问题?  index  初始化不是0吗?
        int len = pre.length;
        return reConstructBinaryTree(pre, in, 0, len - 1);
    }

    public static TreeNode reConstructBinaryTree(int[] pre, int[] in, int s, int e) {
        TreeNode treeNode = null;
        if (s <= e) {
            treeNode = new TreeNode(pre[index]);
            int i = getiByVal(pre[index++], in, s, e);
            treeNode.left = reConstructBinaryTree(pre, in, s, i - 1);
            treeNode.right = reConstructBinaryTree(pre, in, i + 1, e);
        }
        return treeNode;
    }

   
    public static int getiByVal(int val, int[] in, int s, int e) {
        for (int i = s; i <= e; i++) {
            if (val == in[i]) {
                return i;
            }
        }
        return -1;
    }
}
新手必看!手把手教你在群晖 NAS 上玩转 Docker 容器(Container Manager)!(群晖 NAS 如何创建 Docker 容器以及 Compose 部署项目) 阅读详情

相关推荐

基于微信小程序的智能门禁管理系统的设计与实现(文章+源码)

基于微信小程序门禁管理小程序,该系统支持用户注册登录、查阅新闻动态、提交开门申请和发布留言等功能,同时管理员可以进行用户管理、新闻信息管理、门禁审批管理和留言管理等操作。该系统将采用IDEA开发工具、SSM框架和MYSQL数据库等相关技术,实现用户登录注册、个人信息管理、门禁申请提交、管理员审核等功能。该系统的实现,可以有效提高门禁管理的效率和便利性,同时也具有较强的可扩展性和可维护性。本研究对于智能门禁管理系统的设计和实现具有一定的参考价值。

u011779145的博客 1399

【剑指offer】04——重建二叉树

题目描述   输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 一、二叉树的遍历   二叉树遍历分为三种:前序、中序和后序,为什么这么命名呢?其实是根据节点顺序命名的。 如图为满节点,1为根节点、2为做节点、...

Daycym的博客 288

stm32f103c8t6+esp8266在WiFi下通过手机控制外设

stm32f103c8t6+esp8266在WiFi下通过手机控制外设前言 前言 通过上一篇,介绍了esp8266的基本功能,这篇将用stm32c8t6配合esp8266进行数据交互,实现用手机通过无线的方式去控制外设、开关等;这里相当于把stm32作为上一篇的串口助手和esp8266进行通信; ...

weixin_45430735的博客 1万+

剑指Offer04 —重建二叉树

剑指Offer04 —重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路 二叉树有先序,中序,后序、层次等几个常见的遍历次序,值得注意的是,中序遍历与其他三种遍历中的任何一种结合,均可以唯一地确认一棵二叉树。原因在于可以通过先序、后序或者层次遍历区分出原二叉树(包括二叉树的子树)的根结点,通过该根

qq_39109729的博客 139

单片机OTA升级:Bootloader如何多重校验保障APP完整性?

本文详细介绍了单片机OTA升级中Bootloader如何通过CRC校验、数字签名、版本比对和存储位置检查等多重校验机制保障APP完整性。CRC校验作为快速检测数据完整性的核心手段,结合其他安全措施有效防止设备变砖和安全漏洞,确保远程升级的可靠性。

l3m4n的博客 981

STM32裸机开发基础:寄存器直接操作详解

寄存器是微控制器内部的特殊存储单元,直接与硬件电路连接,用于控制和监视硬件功能。与普通内存不同,寄存器的每一位(bit)通常都有特定的硬件含义。寄存器就是机器的控制面板上的各种开关和指示灯每个开关控制一个具体功能(如打开LED、启动通信)每个指示灯显示一个具体状态(如数据接收完成、错误发生)// GPIO引脚定义1。

2401_88760782的博客 2187

【剑指Offer】04、重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 题解:递归 1 public static TreeNode reConstructBinaryTree(int[] pre,int[] ...

princecharming666的博客 89

数字后端DRC Violation定位与自动化修复:Innovus与Calibre协同实战

设计规则检查(DRC)是芯片tapeout前确保版图可制造性的关键验证环节。在数字后端流程中,Calibre作为signoff级物理验证工具,会依据代工厂SVRF规则文件对GDS进行严格几何检查;而Innovus则提供快速迭代的in-design DRC反馈。两者协同成为工程师定位violation、保障流片成功的主流工作流。面对成千上万条DRC violation,高效的定位与分类思路、跨工具映射技巧,以及基于Tcl脚本的自动化修复方法,能大幅缩短物理验证周期。本文从DRC的分层定位出发,结合Innovu

weixin_29185167的博客 336

剑指Offer #04 重建二叉树(递归)

题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 题目解析 /** * Definition for binary tree * pu...

Veggie的博客 2万+

ArcGISPro小白必看:5分钟搞定3D地形图制作(附免费数据源)

本文为ArcGISPro初学者提供5步制作专业3D地形图的完整指南,涵盖免费数据获取、项目初始化、数据预处理、3D场景构建和成果输出等关键步骤。特别推荐使用NASA的SRTM高程数据和吉林一号卫星影像,帮助用户快速掌握3D地形图制作技巧,适用于教学演示和科研分析。

weixin_28314575的博客 240

大模型算法岗常见面试题100道

LangChain是一个用于构建和运行大型语言模型应用的开源框架。它提供了一套工具和组件,帮助开发者将大型语言模型(如 GPT-3)与其他工具和API结合,以完成更复杂的任务。1、LangChain包含哪些核心概念?Components:可重用的模块,例如API调用、数据库查询等。Chains:将多个Components链接在一起以完成特定任务的流程。Prompt Templates: 用于指导语言模型生成输出的文本模板。Output Parsers:解析语言模型输出的工具。

具身机器人和通用AI 1959

剑指Offer04 重建二叉树

代码有问题 1 /************************************************************************* 2 > File Name: 04_Rebuild_BinaryTree.c 3 > Author: Juntaran 4 > Mail: Juntara...

dingrong3926的博客 95

111. 如何创建 SAP ABAP 锁对象(Lock Object)和加锁以及解锁函数

至此,我们完成了 ABAP 系统锁机制和加锁解锁函数的介绍。有了这些基础知识,大家就能在实际工作中,使用 Lock Object 和加锁解锁函数,编写出支持并发访问控制的 ABAP 应用程序了。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1534

剑指offer 04 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 总结:一般笔试这种题必考只是实现的比较少,递归,从前序遍历的头就是树的头结点在中序里面找,中序遍历左边就是左子树,右边右子树(前 中左右 中 左中...

tc950318的博客 125

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

04 图解剑指Offer 重建二叉树 Java题解

04 剑指Offer 重建二叉树 Java题解04 剑指Offer 重建二叉树 Java题解题目链接题目描述题解:图解:代码:复杂度 04 剑指Offer 重建二叉树 Java题解 题目链接 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 题解: 思路:二叉树问题 要用分治法。将重建二叉树分成重建左子树,右子树

Vaxue的博客 382

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

剑指offer04 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 代码: public class Solution { public TreeNode reConstructBinaryTree(in...

行走巨人国 170

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JZ04 剑指offer 重建二叉树

第4题 重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

KazeHelloWorld的博客 90

04重建二叉树--剑指offer,java版

04重建二叉树–剑指offer,java版 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public clas...

sexy_orange的博客 196

【剑指offer】_04 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路 用前序的顺序重建整个二叉树,先判断传进来参数是否合法,创建根结点,然后找到第一个根结点位置,遍历整个中序顺序,找到与前序序列第一个数相等的数的...

LXY的博客 128

剑指Offer-04-重建二叉树

/** * 重建二叉树(根据二叉树先序和中序遍历重建二叉树) * @Description */ public class Test05 { class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int value){ this.value = value; } } public T

qq_27512741的博客 155

剑指offer04:重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4...

creator123123的博客 139

剑指Offer_编程题04 重建二叉树

题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 总思路: 1.在先序序列中找第一个数值将中序序列划分为左右子树并依次递归。 2.当序列中只有一个数时创建节点并向上一级调用返回。 知识点(对于我...

fubicheng208的博客 189

剑指offer 04重建二叉树 Java

一、题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 示例1 输入 [1,2,3,4,5,6,7],[3,2,4,1,6,5,7] 返回值 {1,2,5,3,4,6,7} 二、代码 /** * Definition for binary tree * public class TreeNode {

雨渊的博客 206

《剑指offer》-04重建二叉树

重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: 1、前序遍历的第一个元素是二叉树的根元素,根据根元素在中序遍历中将中序遍历数组划分左子树和右子树。 2

hwcptbtptp的专栏 340

剑指offer-04:重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路分析 前序遍历的第一个节点为根节点 在中序遍历中找出该节点下标,该节点左边为左子树中序遍历,该节点右边为有序遍历 在前序遍历序列中找到该节点之后相同个数的节点,为左子树前序遍历,接下来的节点为右子树遍历 利用递归即可求得左子树和右子树的根节点,以此类推 代

Monkey-yc 114

剑指offer-04. 重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路: 1.求结点的个数 2.根据前序遍历求根结点(第一个) 3.在中序遍历中找到根结点 4.以根结点为中心把结点分别存入左...

qq_34449717的博客 167
上一篇: 剑指Offer-03.从尾到头打印链表
下一篇: 剑指Offer-05.用两个栈实现队列
happytaohaha
博客等级 码龄9年 37粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值