java 重建二叉树(前序和中序)

根据二叉树前序遍历和中序遍历的结果输出后序遍历(java) NULL 博文链接:https://128kj.iteye.com/blog/1692248 立即下载

案例:给定两个数组,一个为二叉树的前序遍历,另一个为二叉树的中序遍历,还原二叉树

前序的作用就是确定根节点,中序可以根据前序的根节点确定该根节点的左右节点;

使用递归的方法实现

public class RebuildBinaryTree{
    // 二叉树数据结构
    public static class Tree{
    int val;
    Tree left;
    Tree right;
}
    public static void main(String[] agrs)
    {
        int[] prvOrder = {1,2,4,7,3,5,6,8};// 前序数组
        int[] inOrder = {4,7,2,1,5,3,8,6}; // 中序数组
        checkTree(prvOrder,inOrder);  // 检查输入合法性
    }
    public static void checkTree(int[] prvOrder,int[] inOrder)
    {    
        if(prvOrder==null||inOrder==null||prvOrder.length!=inOrder.length)
        {
            System.out.println("input error");
        }else
        {
            Tree head = getRebuild(prvOrder,0,prvOrder.length-1,inOrder,0,inOrder.length-1);
        }
    }
     /**
      * 根据前序遍历和中序遍历构建二叉树
      * @param preOrder    前序遍历序列
      * @param ps        前序遍历开始位置
      * @param pe        前序遍历结束位置
      * @param inOrder    中序遍历序列
      * @param is        中序遍历开始位置
      * @param ie        中序遍历结束位置
      * @return            构建的树的根节点
      */
    public static Tree getRebuild(int[] prvOrder,int ps,int pe,int[] inOrder,int is,int ie)
    {
        // 开始位置大于结束位置说明已经出来到叶节点
        if(ps>pe)
            return null;
        Tree root = new Tree();
        // 前序遍历的第一个为当前的根节点
        root.val = prvOrder[ps];
        // index 为根节点在中序遍历序列中的位置,为了下面计算出左右根节点左右子树的个数和起始位置
        int index = is;
        while(is<=ie&&inOrder[index]!=prvOrder[ps]) // 遍历查找根节点在中序的位置
        {
            index++;
        }
        // 递归遍历左子树
        // 当前节点的左子树的个数为 index-is
        // 左子树对应的前序遍历的位置proOrder[ps+1,ps+index-is]
        // 左子树对应的中序遍历的位置inOrder[is,index-1]
        root.left = getRebuild(prvOrder,ps+1,ps+index-is,inOrder,is,index-1);
        // 递归遍历右子树
        // 当前节点对应右子树的个数为 ie-index
        // 右子树对应的前序遍历的位置 prv[ps+index-is+1,pe]
        // 右子树对应的中序遍历的位置 inOrder[index+1,ie]
        root.right = getRebuild(prvOrder,ps+index-is+1,pe,inOrder,index+1,ie);
        // 递归结束返回根节点
        return root;
    }
}

 

90nm CMOS工艺下6μW超低功耗LDO设计实战:从原理图到版图全解析 本文详细解析了在90nm CMOS工艺下设计一款静态功耗仅为6μW的超低功耗LDO(低压差线性稳压器)的全过程。文章深入探讨了如何通过改进型翻转电压跟随器(FVF)架构实现无输出电容设计,在满足极低功耗和芯片面积高效(chip-area-efficient)要求的同时,确保环路稳定性与快速瞬态响应,为物联网、可穿戴设备等应用提供关键电源管理解决方案。 阅读详情

相关推荐

从CST到AD:高效PCB阵列设计与介质优化实战

本文详细解析了从CST电磁仿真软件到Altium Designer(AD)的PCB阵列设计全流程,重点解决毫米波天线等精密设计中模型导出、介质优化和阵列构建的核心难题。通过实战技巧,指导工程师高效处理DXF文件导入、复杂铜皮填充、空气介质实现等关键步骤,确保高精度设计从仿真到制造的顺利转换,提升工作效率与设计可靠性。

weixin_28256233的博客 439

根据前序和中序遍历重建二叉树 java

根据前序和中序遍历重建二叉树 java 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 先来分析一下前序遍历和中序遍历得到的结果, 前序遍历第一位是根节点; 中序遍历中,根节点左边的是根节点的左子树,...

柳絮 8058

深入解析Incapsula reese84的生成机制与绕过策略

本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。

weixin_29256771的博客 443

java实现根据前序遍历和中序遍历重建二叉树

前序遍历:{1,2,4,7,3,5,6,8} 中序遍历:{4,7,2,1,5,3,8,6} 根据前序遍历第一个元素“1”,可以将中序遍历分成左右子树,左子树{4,7,2},右子树{5,3,8,6}。 接着,根据前序遍历第二个元素“2”,将“1”的左子树{4,7,2}分为左子树{4,7},右子树{}。 再根据前序遍历第三个元素“4”,将“2”的左子树{4,7}分为左子树{},右子树{7}。 ...

bug的博客 830

基于Claude AI的Dex个人操作系统:从零部署到高效工作流实战

在当今信息过载的时代,个人知识管理(PKM)和任务自动化成为提升效率的关键技术。传统PKM工具如Notion、Obsidian虽然提供了强大的信息存储能力,但本质上是被动的数据库,需要用户手动维护结构和链接,容易形成信息孤岛。其核心原理在于通过预设的文件夹结构和智能路由,实现信息的自动归类与关联。这种自动化同步机制的技术价值在于彻底消除重复劳动和决策疲劳,让用户从繁琐的信息整理中解放出来,专注于高价值思考。在实际应用场景中,它尤其适合需要处理大量会议、任务和人际关系的知识工作者,如产品经理、项目经理和团队领

weixin_42521558的博客 377

YOLO26涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇 | 引入 LFSB 差分双维注意融合模块,通过交替特征融合与分离策略,能够精准区分目标特征,顶会助力YOLO26有效涨点

本文提出LSFB差分双维注意融合模块,用于改进YOLO26目标检测模型。该模块通过融合-分离交替策略和差分注意力机制,有效提升模型在复杂场景下的特征分离能力,特别是在处理重叠物体或反射干扰时表现优异。LSFB采用双向投影、双维注意力计算和跨流减法算子,实现特征共享与独立提取的平衡。实验表明,该模块能显著减少特征混淆,提高检测精度和鲁棒性。文章还详细介绍了模块实现的核心代码、YAML配置文件修改方法以及三种改进方案,为YOLO26模型性能提升提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 326

剑指OFFER 面试题7(二叉树):(前序/后序+中序)重建二叉树 (JAVA)

题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},请重建二叉树并返回。 思路: (1)首先根据根节点a将中序遍历划分为两部分,左边为左子树,右边为右子树 (2) 在左子树和右子树分布根据上述规则递归,得出左、右边...

weixin_45405128的博客 493

PPT制作能力在职场中真的重要吗?一定要美术功底才能学好PPT吗?

我推出PPT技能培训专栏啦!好的PPT可以让你事半功倍、2023拥有PPT能力还可以让你具备一门极有价值的斜杠能力。更多内容请进:梦幻训练营专栏。专栏内会用本人积累的近10年的PPT学习方法论在短时间内教会你如何制作出精美绝伦的PPT,每篇教程后还会免费赠送一些小福利,不可多得。

打造全国最全的AI Agent开发知识领域的博客 728

java-利用前序和中序遍历重建二叉树

如果只给出一个二叉树的前序遍历和中序遍历怎么重建起一个二叉树呢? 在剑指offer上给出这个题目,前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}。 思路:先来分析一下前序遍历和中序遍历得到的结果, 前序遍历第一位是根节点; 中序遍历中,根节点左边的是根节点的左子树,右边是根节点的右子树。 首先,根节点 是{ 1 }; 左子树是:前序{ 2,4...

Ucsasuke的博客 479

YOLOv11改进策略【独家融合改进】| MobileNetV4+BiFPN,轻松实现降参涨点,适用专栏内所有的骨干替换

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 2361

FCTA/FCTB 前方交通穿行预警/制动系统技术规范

FCTA&FCTB前方交叉路口预警制动系统是针对十字路口和停车场等"鬼探头"场景设计的驾驶辅助系统。系统在自车速度0-40km/h范围内工作,通过角雷达和摄像头检测侧向来车.

未知艺术家的博客 740

重建二叉树(Java)

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表的结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext; }第一思路:我的第一思路是从头到尾输出类比数组那样,于是乎想把链表中的链表结点的指针反转过来,改变链表的方向,然后实现从头到尾输出(结果为从尾到头输出),可是发现修改链表的指针,反转链表的结构比较麻烦。于是乎放弃。最优...

Sweet Baby,甜宝 7805

Tmux学习总结

Tmux 重要概念 使用 Tmux 的时候千万不要去背指令,所有的指令都可以在 .tmux.conf 配置文件中绑定自己顺手的快捷键,也可以配置开启鼠标。 这个是我的配置文件:https://github.com/zuorn/tmux.conf 在Tmux逻辑中,需要分清楚Server > Session > Window > Pane这个大小和层级顺序是极其重要的,直接关系到工作效率: Server:是整个tmux的后台服务。有时候更改配置不生效,就要使用tmux kill-

满目星辰 578

Java 重建二叉树 根据前序中序重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题所需的知识 二叉树的遍历 ​ 这个先中后,是根据何时遍历根节点命名的,左的优先级大于后,比如先序就先遍历根结点,再遍历左节点,最后遍历右节点,中序同理,...

weixin_30606669的博客 143

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

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

java 重建二叉树_Java 重建二叉树 根据前序中序重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题所需的知识二叉树的遍历​这个先中后,是根据何时遍历根节点命名的,左的优先级大于后,比如先序就先遍历根结点,再遍历左节点,最后遍历右节点,中序同理,先左中根...

weixin_39612554的博客 153

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

Java 根据前序和中序 重建二叉树 递归实现

思路 前序提供根节点 中序给到左右树 1.通过前序根节点值找到在中序的位置,中序中根节点左边的全为左树,右为右树 2.得到左右树的 前序序列和中序序列 3.递归传入前序和中序序列,得到左右树 4.将左右树和本节点赋值,返回本节点 public class Math { public static class TreeNode { int val; ...

qq_33683097的博客 438

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【剑指offer】已知二叉树的前序和中序,重建二叉树(java)

写的真费劲!!!! 我就是一道酸菜鱼,又酸,又菜,还多余 (恕我直言,在本地IDE中测试都不会,打印二叉树都要想半天,这还要啥offer啊,我一定是预约上班前被裁员的名额了) public class Solution { public TreeNode reConstructBinaryTree(int [] pre,int [] in) { return reConst...

Handoking的博客【学无止境】 401

重建二叉树Java(前序和中序+中序和后序)

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。LeetCode面试题07 例如,给出: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;

qq_38596491的博客 541

06. 前序+中序重建二叉树 ---剑指Offer(Java版)

<剑指Offer>(Java版):github 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 前序+中序 == 树的结构 推导过程: 首先前序的第一个是根节点: 1 然后在中序中...

过道 451

Java剑指Offer根据前序中序重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 执行用时:3 ms, 在所有 Java 提交中击败了39.18%的用户内存消耗:40.8 MB, 在所有 Java 提交中击败了80.68%的用户通过测试用例:203 / 203...

qq_42900213的博客 189

Java | 剑指Offer | 重建二叉树 | 已知前序和中序复原树

剑指Offer | 重建二叉树 | 已知前序和中序复原树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路 和LeetCode这道题一样 Java | LeetCode | 105. Constr...

肖胖孩de部落格 294

Java实现由前序序列和中序序列重建二叉树,并后序输出。

/** * 得知二叉树前序序列 中序序列构建二叉树 并后序输出 * @author gengtao * */ /** * 使用java中的类来模拟 结构体(c/c++ struct) * */ class BinaryTree{ int value; BinaryTree left; BinaryTree right; } public class train0804 {

huoer_gf的专栏 708

[算法练习-剑指offer]题4.前序+中序序列重建二叉树(Java)

题目 题号:4 题目名:重建二叉树 编程语言 Java 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 初次思路 前序遍历和中序遍历,中序遍历和后续遍历都是一样的逻辑 逻辑: 1.根据前序或者后续遍历找到根节点 2.根节点找到在中序遍历的位置 3.使用中序遍历根节点左边的数据做左子树,右边的数据做右子树 4.这

叶落雨飘的博客 239

【算法专题】重建二叉树

重建二叉树总结 概述 重建二叉树分为三种类型: (1)中序遍历+前序遍历/后序遍历 重建二叉树; (2)中序遍历+层序遍历 重建二叉树; (3)前序遍历+给定叶节点 重建二叉树。 下面分别给出这三类重建二叉树的讲解。 类型一:中序+前序/后序 AcWing 1631. 后序遍历 问题描述 问题链接:AcWing 1631. 后序遍历 分析 对于给定前序遍历的区间[pl, pr]和中序遍历的区间[il, ir],则待构造的树的根节点为preorder[pl],

weixin_42638946的博客 5181

牛客NC12 重建二叉树【中等 dfs Java,Go,PHP】从中序与前序遍历序列构造二叉树

【代码】牛客NC12 重建二叉树【中等 dfs Java,Go,PHP】

weixin_37991016的博客 426

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

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 Java题解 所以很明显,需要递归操作 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * .

北鹤M的代码手账 676
上一篇: java 大数相乘(数组方法实现)
下一篇: 网络原理面试题-TCP
memory_cood
博客等级 码龄10年 25粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memory_cood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值