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

简单的二叉树遍历算法,

为了通过给定的先序遍历(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;

        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网站集群批量管理-Ansible(playbook)

1.剧本概述 1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 2. 剧本yaml格式,yaml格式的文件:空格,冒号 2. 区别 ans-playbookans ad-hoc共同点批量管理,使用模块批量管理,使用模块区别重复调用不是很方便,不容易重复场景部署服务…

网关在不同行业自动化生产线的应用

网关在不同行业自动化生产线的应用&#xff0c;展示了其作为信息与物理世界交汇点的广泛影响力&#xff0c;尤其在推动行业智能化、自动化方面发挥了不可估量的作用。以下是网关技术在污水处理、智慧农业、智慧工厂、电力改造及自动化控制等领域的深入应用剖析。 1. 污水处理 …

java方法对象案例

完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 主方法&#xff1a; package Y; import java.util.Scanner; public class 模仿电影系统main { //目标&#xff1a;完成电影信息展示功能&#xff1b;根据电影id查询该电影的详细 //电影数据// 1,"水门桥&q…

超级智能“试衣镜”!GarDiff:高保真保持目标人物特征和服装细节,虚拟试穿技术新SOTA!

今天给大家介绍一个最新的虚拟试穿技术GarDiff&#xff0c;它可以分析你想穿的衣服和你的照片并提取出衣服的颜色、纹理和形状等细节。然后通过一个特殊的“对比器”来确保衣服与您的身体形状完美契合。这个对比器会使用两种不同的“眼睛”&#xff1a;一种是可以看到整体外观的…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师

一、MTU MUT默认1500,最大传输单元,一致性检测 [R3-GigabitEthernet0/0/1]mtu 1503//更改R3的MTU为1503 查看R3和SW1之间的OSPF邻居关系正常: 默认华为设备没有开启MTU一致性检测! [R3-GigabitEthernet0/0/1]ospf mtu-enable //手动开启MTU检测 [SW1-Vlanif30]ospf mtu…

centos7 yum仓库无法使用的问题

1、问题 如下 2、按照csdn等网页说的做了没有用&#xff01;CentOS-yum源不可用报错&#xff1a;Could not retrieve mirrorlist 问题解决_yum could not retrieve mirrorlist-CSDN博客 3、使用b站博主的方法解决&#xff01; LinuxMirrors: GNU/Linux 一键更换系统软件源脚本…

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程&#xff1a; 参考链接&#xff1a;基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结&#xff1a; 1. VMwear Workstation 查看网关 2. 资源分配 参考&#xff1a; 硬盘&#xff1a;master&#xff08;29 GB&#xff…

基于组合模型的公交交通客流预测研究

摘 要 本研究致力于解决公交客流预测问题&#xff0c;旨在通过融合多种机器学习模型的强大能力&#xff0c;提升预测准确性&#xff0c;为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献&#xff0c;分析了传统统计方法在处理大规…

去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM)-Python案例

1、去噪概率模型&#xff08;Denoising Probabilistic Models&#xff09; 去噪概率模型&#xff08;Denoising Probabilistic Models&#xff09;是一类通过学习数据的潜在分布来去除噪声的生成模型。其核心思想是&#xff0c;在有噪声的数据中&#xff0c;模型通过条件概率学…

pytest框架之fixture测试夹具详解

前言 大家下午好呀&#xff0c;今天呢来和大家唠唠pytest中的fixtures夹具的详解&#xff0c;废话就不多说了咱们直接进入主题哈。 一、fixture的优势 ​ pytest框架的fixture测试夹具就相当于unittest框架的setup、teardown&#xff0c;但相对之下它的功能更加强大和灵活。 …

基于SSM医疗信息管理系统(源码+定制+参考)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Python数字图像处理实战——基于OpenCV实现多种滤波器(附完整代码和结果图)

Python数字图像处理实战——基于OpenCV实现多种滤波器&#xff08;附完整代码和结果图&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测…

分辨率提高4到8倍!AI高清修复工具-upscayl使用方法!

你还在为手中的模糊照片苦恼吗&#xff1f; 是不是想把老照片或低分辨率的图片用于大尺寸印刷&#xff0c;却因为画质糟糕而无从下手&#xff1f; 现在你不再需要高深的Photoshop技能&#xff0c;也不用花费巨资找人修图。借助AI高清修复工具Upscayl&#xff0c;只需几秒钟&am…

Python、R语言Lasso、Ridge岭回归、XGBoost分析Airbnb房屋数据:旅游市场差异、价格预测

全文链接&#xff1a;https://tecdat.cn/?p37839 原文出处&#xff1a;拓端数据部落公众号 分析师&#xff1a; Kefan Yu 在大众旅游蓬勃发展的背景下&#xff0c;乡村旅游已成为推动乡村经济、社会和文化发展的关键力量。当前&#xff0c;乡村旅游接待设施主要以招待所、…

基于Python的抑郁症患者看护系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

如何实现Vue2项目升级Vue3?

Vue3正式版已经发布有两年多了&#xff0c;如今它也已成为Vue的默认开发版本&#xff0c;如果你想要对之前Vue2项目进行升级重构&#xff0c;可以从以下几个维度入手&#xff1a; ① 构建工具 ② 入口文件 ③ 插件 ④ 指令 ⑤ 路由 ⑥ 状态管理 ⑦ 其他 一、构建工具 Vue3推荐使…

HTB:Base[WriteUP]

目录 连接至HTB服务器并启动靶机 1.Which two TCP ports are open on the remote host? 2.What is the relative path on the webserver for the login page? 3.How many files are present in the /login directory? 4.What is the file extension of a swap file? …

springboot如何集成mybatis?

背景&#xff1a;以前一直是直接cv一个项目中现成的xml文件&#xff0c;然后再去自己配置mapper等数据。自己准备做一个单独的例子试一下。 步骤1&#xff1a;在pom.xml文件中插入mybatis-generator插件&#xff0c;这里选的版本是1.3.2&#xff0c;然后指定的generator文件是在…

IDM6.42下载器!下载速度就像坐上了火箭,嗖嗖的快到飞起!

亲爱的朋友们&#xff0c;今天我要给大家安利一款下载神器——Internet Download Manager 6.42&#xff08;简称IDM&#xff09;&#xff01;这款软件简直就是下载界的“速度与激情”&#xff0c;用了它之后&#xff0c;你会发现下载速度就像坐上了火箭&#xff0c;嗖嗖的快到飞…