剑指Offer-04.重建二叉树

【ISAR成像】基于Matlab的飞机点目标模型仿真与图像优化 本文详细介绍了如何使用Matlab进行ISAR成像仿真,重点讲解了从构建飞机点目标模型到生成清晰图像的完整流程。通过模拟雷达回波、距离压缩、运动补偿及方位压缩等核心信号处理步骤,并结合相位梯度自聚焦等优化技巧,有效提升了ISAR图像的清晰度与分辨率。文章还分享了雷达参数调优、加窗处理等实战经验,为雷达信号处理与目标识别研究提供了实用指导。 阅读详情

重建二叉树

题目

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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;
    }
}
Unity热更实战:用YooAsset+HybridCLR实现小游戏资源与代码双更新(含避坑清单) 本文详细介绍了Unity小游戏开发中如何通过YooAsset与HybridCLR实现资源与代码双热更新方案。内容涵盖环境配置、架构设计、微信小游戏专项优化、热更代码工程化实践及真机调试技巧,帮助开发者解决审核周期长、紧急修复等痛点,提升更新效率与稳定性。 阅读详情

相关推荐

Anchor graph 对齐文献解读

Align then Fusion: Generalized Large-scale Multi-view Clustering with Anchor Matching Correspondences文献解读

atease0001的博客 1165

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

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

Daycym的博客 288

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?

本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。

weixin_29268637的博客 695

剑指Offer04 —重建二叉树

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

qq_39109729的博客 139

针对so层不固定位置的动态加密,怎么解决?(面试题)

Android逆向之破解某应用加密算法(动态调试so和hook so代码):so 代码动态解密后才执行,我们可以在解密完成后获取解密后的代码或数据。Android逆向之旅—动态方式破解apk进阶篇(IDA调试so源码)如果你有更具体的加密场景,欢迎提供更多信息,我可以给出更详细的方案!某些 so 在运行时生成密钥,解密后再用。某APP密码加密算法分析。

SXXYNHHXX的博客 925

C#实现跨域访问共享文件夹的账号密码验证方案

本文详细介绍了在C#中实现跨域访问共享文件夹的账号密码验证方案。通过调用Windows API LogonUser函数,结合LOGON32_LOGON_NEW_CREDENTIALS登录类型,可安全模拟指定用户身份,有效解决工作组与域环境间的文件共享访问难题。文章提供了完整的工具类封装、多种实战场景示例及详细的错误排查指南。

pea55的博客 540

【剑指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

基于LendingClub数据的信贷分析和建模报告

一:课题分析 二:数据获取 三:数据探索 3.1主要特征含义理解 3.2特征分布 3.2.1目标特征分布 3.2.2分类变量的分布 3.2.3连续数值特征分布 3.2.4时序特征分布 3.2.5文字特征分布 3.2.6两两特征的协方差 四:数据预处理 4.1数据集划分 4.2特征缺失值识别与处理 4.2.1严重缺失值的处理 4.2.2缺失值填充 4.3同值性特...

棒子皮蹦蹦床 2万+

剑指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万+

华为OD机试真题 新系统 2026-06-10 C++ 实现【设备重排SN】

通信设备SN一般是包含:字母、数字,用'-'(破折号)进行分组分割,例如:8F-3T-1G-2n是一个有效的SN地址。 现在要对已经存在的SN 按照新的规则进行重排:

MISAYAONE的博客 129

1985-2021年30m全国逐年土地覆被数据(含分省数据)

基于CLCD,揭示了1985年至2019年期间中国土地覆被变化的趋势和模式,如不透水表面(+148.71%)和水(+18.39%)的扩大,耕地(-4.85%)和草地(-3.29%)的减少,以及森林(+4.34%)的增加。由于中国的一系列造林政策,如1980年代启动的三北防护林工程和2000年后启动的绿色增益工程,从1985年到 2019年,森林增加了4.34%,灌木减少了259万公顷,与 ESACCI_LC的减少趋势相似。尽管为了养活不断增长的人口,中国东北和西北地区进行了广泛的开垦,但耕地普遍减少。

J_Giser的博客 1471

剑指Offer04 重建二叉树

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

dingrong3926的博客 95

SAPGUI 与 ADT 的时代分野:在多云架构下,谁还能代表现代 SAP 开发

摘要(149字) SAP开发工具正经历代际更迭:SAPGUI基于专有协议(NI/DIAG)的厚客户端架构难以适配多云环境,而ADT(ABAP Development Tools)通过HTTP(S)协议和Eclipse生态成为ABAP Cloud/RAP开发的唯一入口。关键差异体现在:ADT支持CDS、行为定义等云原生对象建模,天然对齐BTP的零信任网络;集成ATC、Git等DevOps工具链;而SAPGUI无法创建RAP核心对象,在跨平台、自动化方面存在硬限制。官方文档明确将ADT作为Clean Core战

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

剑指offer 04 重建二叉树

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

tc950318的博客 125

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

剑指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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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、付费专栏及课程。

余额充值