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

news2024/12/23 23:06:46

简单的二叉树遍历算法,

为了通过给定的先序遍历(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.coloradmin.cn/o/2202906.html

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

相关文章

基于SpringBoot+Vue+MySQL的药品信息管理系统

系统展示 管理员界面 医生界面 员工界面 系统背景 随着医疗技术的不断提升&#xff0c;药品在治疗疾病中扮演着越来越重要的角色。传统的药品管理方式以人工方式为主&#xff0c;但人工管理难以满足现代社会快速发展的需求。因此&#xff0c;需要一种更加高效、便捷的信息化管理…

作为一个直播运营,需要关注哪些数据指标?

在直播电商这一高度竞争且日新月异的行业中&#xff0c;作为直播运营的专业人士&#xff0c;若未能充分利用先进工具并紧密关注一系列核心数据指标&#xff0c;将难以推动直播间的持续成长与突破&#xff0c;且在达到一定规模后极易陷入停滞不前的困境。 本人在直播带货领域深耕…

Redis数据结构和使用场景

背景 Redis提供了丰富且结构简单的数据结构类型&#xff0c;在开发中被大量使用&#xff0c;接下来就来盘点下Redis的各种常用数据结构&#xff0c;以及他们的内部编码实现和使用场景。 数据结构 String 字符串类型是Redis最基础的数据结构。首先键都是字符串类型&#xff0c…

Bootstrap 5 练习 - 显示工具提示

文章目录 引言准备工作创建HTML文件导入Bootstrap 5框架编写页面代码编写JavaScript脚本浏览网页注意事项结束语 引言 大家好&#xff0c;今天我们将一起学习如何在Bootstrap 5中创建一个简单的工具提示&#xff08;Tooltip&#xff09;。工具提示是一个非常实用的用户界面元素…

常见大模型架构模式

以下是几种常见的大模型架构模式&#xff1a; 1. 路由分发架构模式 工作原理 当用户输入一个Prompt查询时&#xff0c;该查询会被发送到路由转发模块。路由转发模块对输入Prompt进行分类。如果Prompt查询是可以识别的&#xff0c;那么它会被路由到小模型进行处理。小模型通常具…

【SQL】收入更高的员工

目录 语法 需求 示例 分析 代码 语法 FROM Employee a, Employee b 两个表之间笛卡尔积&#xff08;Cartesian product&#xff09;的形式&#xff0c;用了逗号分隔的连接&#xff08;comma-separated join&#xff09;&#xff0c;这是早期SQL语法中用于连接表的一种方式…

SpringWeb运行流程

文章目录 定义工作流程springWeb的配置1.导入相关依赖2.在web.xml中配置DispatcherServlet3.开启springMVC注解4.处理器类搭建 定义 SpringWeb&#xff0c;也叫spring MVC,是spring框架中的一个模块&#xff0c;基于servlet API构建的原始web框架,ssm为springspringWebmybatis…

AILabel

官方文档&#xff1a;https://gitee.com/JoinXin/AILabel 定义 AILabel类库是一款集打点、线段、多段线、矩形、多边形、圆圈、涂抹等多标注形式于一体&#xff0c;附加文本&#xff08;Text&#xff09;、标记&#xff08;Marker&#xff09;、缩略图&#xff08;EagleMap&…

SpringBoot配置入门

Spring Boot 概述 Build Anything with Spring Boot&#xff1a;Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring…

汽车行业线上预约小程序源码系统 在线预约试驾+贷款计算器 带完整的安装代码包以及搭建部署教程

系统概述 这款汽车行业线上预约小程序旨在为用户提供一个全方位了解汽车信息、轻松预约试驾、快速计算购车贷款成本的一站式服务平台。整个系统采用现代化的设计理念和技术架构&#xff0c;确保用户界面友好且响应迅速。同时&#xff0c;针对企业端&#xff0c;该平台还支持后…

利用特征点采样一致性改进icp算法点云配准方法

1、index、vector 2、kdtree和kdtreeflann 3、if kdtree.radiusSearch(。。。) > 0)

系统开发基础错题解析二【软考】

目录 前言1.人机界面设计2.架构设计2.1管道过滤器体系2.2仓库风格 3.软件测试相关概念4.白盒测试用例4.14.2 5.测试分类与阶段任务划分6.软件维护类型7.软件质量保证8.软件过程改进 前言 本文专门用来记录本人在做软考中有关系统开发基础的错题&#xff0c;我始终认为教学相长…

电脑插上U盘不显示怎么回事?怎么解决?

平时使用电脑的时候经常会使用U盘来传输数据或是备份文件&#xff0c;有时候会遇到一个令头疼的问题&#xff0c;比如&#xff0c;将U盘插入电脑的USB口后&#xff0c;设备却显示不出来。电脑上插入U盘后却不显示会影响我们的正常工作。接下来&#xff0c;我们一起分析一下故障…

Linux云计算 |【第四阶段】RDBMS2-DAY2

主要内容&#xff1a; 数据读写分离概述、Maxscale实现数据读写分离、多实例配置、中间件概述 一、数据读写分离概述 数据读写分离&#xff08;Read/Write Splitting&#xff09;是一种数据库架构设计模式&#xff0c;旨在提高数据库系统的性能、可扩展性和可用性。通过将读操…

Machine Learning Specialization 学习笔记(6)

文章目录 前言一、协同过滤二进制标签均值归一化 二、基于内容的过滤三、PCA算法降低特征数量PCAPCA和线性回归重建 四、强化学习回报与折扣因子马尔科夫决策过程状态动作值函数定义&#xff1a;作用&#xff1a;学习过程&#xff1a;Qfunction 贝尔曼方程random stochastic en…

在 ubantu 20.04 云服务器上基于 bochs 编译 linux0.11

安装 bochs 将下面的命令全部执行一遍&#xff1a; sudo apt-get install build-essential sudo apt-get install xorg-dev sudo apt-get install bison sudo apt-get install g 我们区官网下载一下bochs的源码&#xff1a;bochs下载 这里我下载好了bochs2.6.8 这个版本的…

基于SpringBoot+Vue+uniapp的高校教务管理小程序系统设计和实现

2. 详细视频演示 文章底部名片&#xff0c;联系我获取更详细的演示视频 3. 论文参考 4. 项目运行截图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 代码运行&#xff0c;效果展示图 5. 技…

中科星图GVE(案例)——AI检测采样区域的滑坡

目录 简介 函数 gve.Services.AI.Object_Detection_Landslide(image) 代码 结果 知识星球 机器学习 简介 AI可以通过分析卫星图像或航拍图像来检测采样区域的滑坡。以下是一些可能的方法&#xff1a; 图像识别&#xff1a; AI算法可以训练&#xff0c;以识别滑坡的视觉…

Spring Boot常见错误与解决方法

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; 目录 创建第一个SpringBoot项目 SpringBoot项目各个…

基于分级分类的千亿级规模车联网数据采集与数据安全方案与实践

当前&#xff0c;中国的汽车行业发展势头正旺。造车势力百家争鸣、百花齐放&#xff0c;甚至迈出国门、走向世界。 比如&#xff0c;前不久我们看到的一个现象&#xff1a;中国新能源汽车在欧洲和中东备受欢迎&#xff0c;把本地汽车打的毫无招架之力。 那在这个过程中&#…