算法-依据先序遍历和中序遍历构建二叉树

简单的二叉树遍历算法,

为了通过给定的先序遍历(preorder)和中序遍历(inorder)数组构造二叉树,我们需要理解这两种遍历方式的特点:

  • 先序遍历(Preorder):首先访问根节点,然后遍历左子树,最后遍历右子树。

  • 中序遍历(Inorder):首先遍历左子树,然后访问根节点,最后遍历右子树。

利用这些特点,我们可以采用递归的方式构建二叉树。

基本思路是:

  1. 先序遍历的第一个元素总是当前子树的根节点。

  2. 在中序遍历中找到这个根节点的位置,它左侧的所有元素都属于左子树,右侧的所有元素都属于右子树。

  3. 递归地构造左子树和右子树,左子树的先序遍历和中序遍历分别是原先序遍历中根节点之后的部分和中序遍历中根节点左侧的部分;右子树的先序遍历和中序遍历分别是原先序遍历中左子树之后的部分和中序遍历中根节点右侧的部分。

代码如下:

import javax.swing.tree.TreeNode;public class buildTree {// 给定两个数组 preorder和inorder 一个线序遍历,一个中序遍历,请构造二叉树并返回其根节点class Solution{public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder == null || inorder==null || preorder.length != inorder.length){return null;}return buildTreeHelper(preorder,0,preorder.length-1,inorder,0,inorder.length-1);}public TreeNode buildTreeHelper(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart,int inEnd){if(preStart > preEnd||inStart > inEnd){return null;}// 先序遍历的第一个元素就是根节点TreeNode root=new TreeNode(preorder[preStart]);// 在中序遍历中找到根节点的位置int rootIndexInorder = inStart;while(rootIndexInorder <= inEnd&&inorder[rootIndexInorder]!=root.val){rootIndexInorder++;}int leftSubtreeSize=rootIndexInorder-inStart;//递归构建左子树和右子树root.left=buildTreeHelper(preorder,preStart+1,preStart+leftSubtreeSize,inorder,inStart,rootIndexInorder-1);root.right = buildTreeHelper(preorder, preStart + leftSubtreeSize + 1, preEnd, inorder, rootIndexInorder + 1, inEnd);return root;}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何高效部署SD-WAN及是否需要路由器?

随着SD-WAN&#xff08;软件定义广域网&#xff09;的快速普及&#xff0c;企业在构建网络架构时迎来了更多灵活和高效的管理方式。但在决定是否仍需部署物理路由器时&#xff0c;关键在于企业的具体网络需求与架构特点。 SD-WAN的最大特点是其通过虚拟化技术来实现网络管理。通…

<<迷雾>> 第10章 用机器做一连串的加法(6)--循环移位寄存器改进的控制器 示例电路

使用循环移位寄存器来简化装载和相加过程. info::操作说明 鼠标单击开关切换开合状态 开始之前, 应当设置循环移位寄存器 RR 的初始状态, t01, t10.(如果不是该状态, 可单击一次开关 K 即可) 在 GA 传输门左边的开关置入一个数, 比如 10. 闭合 K装载, 断开 K相加, 此时 IGAIR…

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器 源链接&#xff1a;https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idchinaFlag 国内站点预览&#xff1a;http://threehub.cn github地址: https://github.com/z2586300277/three-ce…

TY1801 内置GaN电源芯片(18w-65w)

TY1801 是一款针对离线式反激变换器的多模式 PWM GaN 功率开关。TY1801内置 GaN 功率管,具备超宽 的 VCC 工作范围&#xff0c;非常适用于 PD 快充等要求宽输出电压的应用场合,TY1801不需要使用额外的绕组或外围降压电路&#xff0c;节省系统 BOM 成本。TY1801 支持 Burst&…

【最新华为OD机试E卷-支持在线评测】智能成绩表(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

Unity网络开发基础 —— 实践小项目

概述 接Unity网络开发基础 导入基础知识中的代码 需求分析 手动写Handler类 手动书写消息池 using GamePlayer; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;/// <summary> /// 消息池中 主要是用于 注册 ID和消息类…

视频怎么去除杂音保留人声?让人声更动听!视频噪音处理攻略

在视频制作过程中&#xff0c;音质是至关重要的一环。然而&#xff0c;很多时候我们录制的视频会伴随着各种不想要的杂音&#xff0c;比如风声、交通噪音或是其他环境音&#xff0c;这些杂音严重影响了观众的观看体验。那么&#xff0c;如何在保留人声的同时&#xff0c;有效地…

Linux与科学计算

1、引言 Linux作为一种开源操作系统&#xff0c;在科学计算领域得到了广泛的应用。科学计算通常涉及处理大量的数据和复杂的数学模型&#xff0c;要求计算机系统具备强大的计算能力、灵活性和高效性。Linux凭借其高可扩展性、稳定性和开源生态系统的优势&#xff0c;成为科学计…

Scala面试题大全~基础题(15题)

1&#xff1a;Scala是什么? Scala是一种多范式的编程语言&#xff0c;它结合了面向对象编程和函数式编程的特性&#xff0c;它支持面向对象、函数式和命令式编程方法。Scala运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;这意味着它可以与Java代码无缝集成。它还…

情绪识别数据集(包含25w张图片) yolo格式类别:八种训练数据已划分, 识别精度:90%

情绪识别数据集(包含25w张图片) yolo格式 类别&#xff1a;Anger、Contempt、Disgust、Fear、Happy、Neutral、Sad、Surprise 八种 训练数据已划分&#xff0c;配置文件稍做路径改动即可训练。 训练集&#xff1a;171010 验证集&#xff1a;54060 测试集&#xff1a;27550 共计…

企业架构系列(17)使用ArchiMate支持TOGAF

从本篇开始&#xff0c;介绍如何使用 ArchiMate 建模语言支持 TOGAF 标准。用于支持使用企业架构、解决方案或其他架构活动进行业务转型。 架构开发方法&#xff08;ADM&#xff09;是TOGAF标准的方法组件&#xff0c;它描述了若干活动阶段。例如&#xff0c;ADM预备阶段的重点…

雨晨 24H2 正式版 Windows 11 iot ltsc 2024 适度 26100.2033 VIP2IN1

雨晨 24H2 正式版 Windows 11 iot ltsc 2024 适度 26100.2033 VIP2IN1 install.wim 索引: 1 名称: Windows 11 IoT 企业版 LTSC 2024 x64 适度 (生产力环境推荐) 描述: Windows 11 IoT 企业版 LTSC 2024 x64 适度 By YCDISM 2024-10-09 大小: 15,699,006,618 个字节 索引: 2 …

探索高效的 PDF 拆分工具及其独特功能

当一份大型的PDF文档包含了多个不同主题或章节的内容时&#xff0c;将其拆分成独立的部分可以更方便我们的阅读、编辑和管理。接下来&#xff0c;让我们一起走进PDF拆分工具的世界&#xff0c;了解它们的功能和价值。 1.福昕PDF编辑器 链接一下>>https://editor.foxits…

C++ 算法学习——1.8 单调栈算法

单调栈&#xff08;Monotonic Stack&#xff09;是一种在解决一些数组或者链表相关问题时非常有用的数据结构和算法。在C中&#xff0c;单调栈通常用于解决一些需要快速找到元素左右第一个比当前元素大或小的问题。 定义&#xff1a; 单调栈实际上是一个栈&#xff0c;但是与普…

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全

政府单位为了保护网络不受外部威胁和内部误操作的影响&#xff0c;通常会进行网络隔离&#xff0c;隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境&#xff08;如内部不同网络&#xff0c;内部网络和外部网络&#xff09;之间安全传输数据的解决方案。 使用…

DVWA | DVWA 靶场初识

关注这个靶场的其它相关笔记&#xff1a;DVWA —— 靶场笔记合集-CSDN博客 0x01&#xff1a;DVWA 靶场简介 DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个 PHP/MySQL 的 Web 应用程序&#xff0c;它被故意设计成包含多种安全漏洞&#xff0c;以便为网络…

正点原子学习笔记之汇编LED驱动实验

1 汇编LED原理分析 为什么要写汇编     需要用汇编初始化一些SOC外设     使用汇编初始化DDR、I.MX6U不需要     设置sp指针&#xff0c;一般指向DDR&#xff0c;设置好C语言运行环境 1.1 LED硬件分析 可以看到LED灯一端接高电平&#xff0c;一端连接了GPIO_3上面…

安卓手机平板远程访问内网服务器中安装的code-server编程开发实战

文章目录 前言1.Ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 前言 本文主要介绍如何在Linux Ubuntu系统安装code-server&#xff0c;并结合cpolar内网穿透工具配置公网地址&#xff0c;轻松实现使用安…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

YOLOv10改进策略【注意力机制篇】| 引入MobileNetv4中的Mobile MQA,提高模型效率

一、本文介绍 本文记录的是基于Mobile MQA模块的YOLOv10目标检测改进方法研究。MobileNetv4中的Mobile MQA模块是用于模型加速&#xff0c;减少内存访问的模块&#xff0c;相比其他全局的自注意力&#xff0c;其不仅加强了模型对全局信息的关注&#xff0c;同时也显著提高了模…