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

从前序与中序遍历序列构造二叉树算法讲解 通过前序遍历和中序遍历序列构造二叉树,关键在于利用两种遍历序列的特性,确定根节点以及划分左右子树节点序列,再通过递归构建二叉树。掌握这个算法对于理解二叉树的遍历特性以及递归思想在树结构中的应用很有帮助,同时在实际开发中,对于处理树相关的数据结构和问题也能提供思路。 阅读详情


import java.util.HashMap;

public class PreInToTree {
    public static TreeNode preInToTree(int[] pre,int[] in){
        if(pre==null||in==null){
            return null;
        }

        //map存储中序遍历序列,key节点值,value:节点坐标,用于查询头节点在中序序列中的坐标
        HashMap<Integer, Integer> map = new HashMap<>(8);
        for(int i=0;i<in.length;i++){
            map.put(in[i],i);
        }

        return preIn(pre,0,pre.length-1,in,0,in.length-1,map);
    }


    public static TreeNode preIn(int[] pre, int pl, int pr, int[] in, int il, int ir, HashMap<Integer,Integer> map){
        if(pl>pr){
            return null;
        }

        //前序序列第一个元素为头节点
        TreeNode head = new TreeNode(pre[pl]);

        //获取头在中序的坐标,进而得出划分子树的边界值
        int index = map.get(pre[pl]);

        //pl,pr,分别为前序序列的左右边界。il,ir,分别为中序遍历的左右边界,递归构造左右子树
        head.left = preIn(pre, pl+1, pl + index - il, in, il, index-1, map);
        head.right=preIn(pre,pl + index - il+1,pr,in,index+1,ir,map);
        return head;

    }
}
JOOQ用法和实例 jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。jOOQ的核心优势是可以将数据库表结构映射为Java类,包含表的基本描述和所有表字段。通过jOOQ提供的API,配合生成的Java代码,可以很方便的进行数据库操作生成的Java代码字段类型是根据数据库映射成的Java类型,在进行设置和查询操作时,因为是Java代码,都会有强类型校验,所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。 阅读详情

相关推荐

Python RK3588 MPP 8路视频硬解码!全体目光向我看齐!

本文重写了官方demo、加入了Zlmediakit进行拉流并通过pybind11将代码封装成so库,现在,在python中直接通过import的方式,就能完成基础的拉流解码操作,目前支持8路拉流解码!!!

m0_46303486的博客 4878

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

这里search_每次都要把根节点在preorder中的下标和inorder中的下标传入,为了把节点在preorder和inorder中的下标对应起来,可以用hash,将节点值作为key,inorder下标作为value,就可以通过preorder的下标,找到节点值,使用节点值为key在hash中查到节点在inorder中的下标。,7,6,8] -> 左子树大小3,inorder为[1,9,2],右子树大小3,inorder为[7,6,8],9,1,2,6,7,8] -> 根节点为3。

Berlin的博客 1273

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7240

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

首先访问根节点,然后访问左子树,再访问右子树。:首先访问左子树,然后访问根节点,最后访问右子树。OnOn2O1On。

weixin_47521269的博客 944

VCS多lib编译实战:如何高效处理Verilog模块重命名与分开编译

本文深入探讨了在复杂SoC设计中,如何利用VCS工具实现多库编译,以高效处理Verilog模块重命名与分开编译的工程难题。通过解析synopsys_sim.setup配置、Config映射机制,并提供完整的自动化脚本实战指南,帮助工程师构建健壮、可维护的编译环境,从而显著提升大型项目的编译效率和代码管理灵活性。

weixin_29169505的博客 357

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

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

二叉树OJ题,leetcode 105.从前序与中序遍历序列构造二叉树,leetcode 106.从中序与后续遍历序列构造二叉树。

Tianzhenchuan的博客 2576

生存分析机器学习问题

然而,随着人工智能 (AI) 和机器学习 (ML) 的兴起,科学家现在能够开发更复杂的模型,揭示这些数据集中的模式和特征,从而为癌症的生物学、诊断、预后、治疗和预后提供新的见解。病情更重的患者可能接受更强(或更弱)的治疗,导致治疗方案与不良预后(死亡)强相关。数据集中包含失访或研究结束时仍存活的患者(删失数据),他们的真实生存时间未知,仅知道其存活时间不低于观察到的最后一次随访时间。优先选择参数少、结构简单的模型(如带强正则化的线性模型、简单树模型),避免复杂模型(如深度神经网络)。时刻的状态是未知的。

4AM_明朝百晓生 1222

从前序与中序遍历序列构造二叉树的两种思路

最近在leetcode上刷到了一道题105.从前序与中序遍历序列构造二叉树给定两个整数数组preorder和inorder,其中preorder是二叉树的inorder是同一棵树的,请构造二叉树并返回其根节点。

Daydream_maker的博客 976

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。

weixin_54787054的博客 855

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1525

[面试精选] 0105. 从前序与中序遍历序列构造二叉树

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

人生需要动态规划 学习需要贪心算法 1381

EMC原理-传导(共模、差模)与辐射(近场、远场)详解

本文深入介绍了电磁兼容(EMC)的基本概念,包括EMI和EMS,以及如何处理传导干扰(共模、差模)和辐射干扰(近场、远场)。详细讨论了近场感应、远场辐射的原理,滤波器和屏蔽技术在抑制噪声信号中的作用。此外,探讨了差模和共模干扰的来源、影响及滤除方法,如使用差模电感、电容和共模线圈。最后,提到了穿心电容在滤除高频噪声中的应用。

让你爱上电路设计 3546

【Hot 100】105. 从前序与中序遍历序列构造二叉树

当前你在每次递归时都线性搜索根节点在中序遍历中的位置,这会导致时间复杂度较高(最坏情况下为O(n^2))。可以使用哈希表(unordered_map)预先存储中序遍历的值和索引,这样可以将查找时间降到O(1),整体时间复杂度优化到O(n)。总结:递归的逻辑其实不复杂,每次都通过前序和中序数组构建当前的根节点,然后递归构建左右子树即可。不过,还有一些可以优化的地方,特别是在查找中序遍历中根节点索引的部分。:虽然题目保证输入合法,但在实际工程中,可以添加一些检查(如前序和中序数组长度是否一致)。

hhw_hhw的博客 1395

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

/对数组做递归操作,但是是数组中的不同部分,所以把首位下标作为范围参数传入递归函数。//只有递归时候两个数组的左右边界时需要注意的点。前序遍历的第一个节点是根节点。在中序遍历中找到根节点的位置。是一个对数组递归的过程。计算左子树的节点数量。

weixin_42658491的博客 657

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...

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

LeetCode 105. 从前序与中序遍历序列构造二叉树 题目链接 3 / \ 9 20 关于二叉树的遍历,其实有个比较好记的方法,假设有一个棵树,只有三个节点,左节点树,当前节点,右边节点。 假设需要打印中间节点(根节点),有三种输出方式 1.按照左、中、右, 9-3-20 由于中间节点在中间输出,称为前序遍历,同理 2.中、左、右 中序遍历 3-9-20 3.左、右、中 后续遍历 9-20-3 所以题目中的二叉树的遍历为 3 / \ 9 20 /

liuhao192的博客 274

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

2.在中序遍历中找到根节点对应的下标;3.根据这个下标划定左右子树的范围;1.先从前序遍历中拿出根节点;4.递归左右子树回到第一步;

qq_74763440的博客 301

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

从前序与中序遍历序列构造二叉树 题目: 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 920 /\ 157 链接:https://leetcode-cn.com/problems/construct-binary-tre...

anyexiadehe的博客 292

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

leetcode105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 先看这么一颗...

peony的博客 182

从前序与中序遍历序列构造二叉树-Leetcode 105-python

从前序与中序遍历序列构造二叉树-Leetcode 105 思路来自:https://blog.youkuaiyun.com/htt789/article/details/80164049 脑子不好使 思路: 1.前序序列第一个为根结点,在中序序列中找到该结点位置,中序序列就分为左右子树结点 2.前序序列除第一个结点,其余为左右子树结点,根据中序序列中左右子树各自的长度将前序序列划分了左右子树 3....

小铅笔 412

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

本文介绍了如何根据二叉树的前序遍历和中序遍历序列重构二叉树。通过递归分治法定位根节点并划分左右子树,使用哈希表优化查找效率。算法时间复杂度为O(n),空间复杂度为O(n)。关键点包括前序首元素为根、中序定位子树、递归构建以及哈希表优化。代码提供了详细实现和测试用例,适用于无重复元素的二叉树重构场景。

红血哥 584

【Hot100】LeetCode—105. 从前序与中序遍历序列构造二叉树

让前序的第一个元素作为中序的分割点。

weixin_44382896的博客 748

[HOT 100] 0105. 从前序与中序遍历序列构造二叉树

根据二叉树的前序遍历和中序遍历结果重建二叉树,需利用前序遍历确定根节点,中序遍历划分左右子树。是同一棵树的中序遍历,请构造二叉树并返回其根节点。是二叉树的先序遍历,

人生需要动态规划 学习需要贪心算法 733

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

105. 从前序与中序遍历序列构造二叉树 描述 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 示例 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 思路 一颗二叉树,对于前序遍历来...

weixin_30667649的博客 101

二叉树进阶学习——从前序和中序遍历序列构造二叉树

【代码】二叉树进阶学习——从前序和中序遍历序列构造二叉树。

2301_80689220的博客 806
上一篇: 二叉树中的最大路径和
下一篇: 恢复二叉搜索树
pianozcl
博客等级 码龄9年 29粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值