【力扣每日一题】力扣105从前序与中序遍历序列构造二叉树

题目来源

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

题目概述

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

思路分析

前序遍历的顺序是:根节点->左子树->右子树 中序遍历的顺序是:左子树->根节点->右子树 所以我们可以使用前序遍历确定树及其子树的根节点,利用中序遍历与之前确定下来的根节点来确定左右子树的范围。 使用力扣提供的例子

我们可以先找到根节点为3

然后就可以确定根节点的两个孩子节点,及其子树。

代码实现

java实现

public class Solution {Map<Integer, Integer> inorderDataAndIndex;public TreeNode buildTree(int[] preorder, int[] inorder) {// 建立中序遍历数据与下标的映射inorderDataAndIndex = new HashMap<Integer, Integer>(){{for (int i = 0; i < inorder.length; i++) {put(inorder[i],i);}}};return create(preorder,inorder, 0, preorder.length - 1, 0, inorder.length - 1);}TreeNode create(int[] preorder, int[] inorder, int pStart, int pEnd, int iStart, int iEnd) {if (pStart > pEnd) {return null;}// 前序遍历第一个节点为根节点TreeNode root = new TreeNode(preorder[pStart]);// 找到在中序遍历的位置int inorderIndex = inorderDataAndIndex.get(preorder[pStart]);// 左子树大小int leftSubTreeSize = inorderIndex - iStart;// 构建子树root.left = create(preorder,inorder, pStart + 1, pStart + leftSubTreeSize  , iStart, inorderIndex - 1);root.right = create(preorder,inorder, pStart + leftSubTreeSize + 1, pEnd  , inorderIndex + 1, iEnd);return root;}}

c++实现

class Solution {
public:unordered_map<int, int> inorder_data_and_index;TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {// 建立中序遍历序列值与下标的映射,方便查找for (int i = 0; i < inorder.size(); i++) {inorder_data_and_index[inorder[i]] = i;}return create(preorder, inorder, 0, preorder.size() - 1, 0, inorder.size() - 1);}TreeNode* create(vector<int>& preorder, vector<int>& inorder, int p_start, int p_end, int i_start, int i_end) {if (p_start > p_end) {return nullptr;}// 前序遍历第一个节点为根节点TreeNode* root = new TreeNode(preorder[p_start]);// 找到在中序遍历的位置int inorder_index = inorder_data_and_index[preorder[p_start]];// 左子树大小int left_sub_tree_size = inorder_index - i_start;// 构建子树root->left = create(preorder, inorder, p_start + 1, p_start + left_sub_tree_size, i_start, inorder_index - 1);root->right = create(preorder, inorder, p_start + left_sub_tree_size + 1, p_end, inorder_index + 1, i_end);return root;}
}

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

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

相关文章

用windbg调试uefi在hyper-v

添加环境变量 CLANG_BINC:\Program Files\NASM\ NASM_PREFIXC:\Program Files\NASM\ 添加path C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify 修改edk2-master\Conf\target.txt TARGET_ARCH X64 编译这两个包 #ACTIVE_PLATFORM EmulatorPkg/…

代码随想录算法训练营(回溯5)| 491.递增子序列 46.全排列 47.全排列 II

491.递增子序列 本题和大家刚做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 题目链接/文章讲解 视频讲解 46.全排列 本题重点感受一下&#xff0c;排列问题 与 组合问题&#xff0c;组合总和&#xff0c;子集问题的区别。 为什么排列问题不用…

算法沉淀——BFS 解决拓扑排序(leetcode真题剖析)

算法沉淀——BFS 解决拓扑排序 01.课程表02.课程表 II03.火星词典 Breadth-First Search (BFS) 在拓扑排序中的应用主要是用来解决有向无环图&#xff08;DAG&#xff09;的拓扑排序问题。拓扑排序是对有向图中所有节点的一种线性排序&#xff0c;使得对于每一条有向边 (u, v)&…

Recorder 实现语音录制并上传到后端(兼容PC和移动端)

Recorder 首页&#xff1a;https://github.com/xiangyuecn/Recorder 一、安装 npm install recorder-core二、代码部分 1. HTML页面 <template><div><el-inputv-model"ttsText"type"textarea"placeholder"请输入内容"><…

外汇天眼:进Goccfx投资群前还好好的,踢出群后本金都没了

在外汇诈骗中&#xff0c;许多骗局都是以“拉群荐股”的方式&#xff0c;将一个个无辜的外汇投资者拽入虚假的外汇平台&#xff0c;投资者一旦进群&#xff0c;结果往往是被反向喊单而爆仓亏损。还有更过分的&#xff0c;就是诈骗分子利用投资者急于挽回损失的心理&#xff0c;…

YOLOv8-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、TensorFlow模块&#xff0c;除此…

前端|Day3:CSS基础(黑马笔记)

Day3:CSS基础 目录 Day3:CSS基础一、CSS初体验二、CSS引入方式三、选择器1.标签选择器2.类选择器3.id选择器4.通配符选择器 四、盒子尺寸和背景色五、文字控制属性1.字体大小2.字体样式&#xff08;是否倾斜&#xff09;3.行高单行文字垂直居中 4.字体族5.font复合属性6.文本缩…

【JAVA】《接口,抽象方法,抽象类 》之三 、抽象类详解

抽象类 详解 一、接口二、抽象方法三、抽象类3.1、抽象类的概念3.2、抽象类的特点&#xff1a;3.3、抽象类的作用&#xff1a;3.4、抽象类的应用&#xff1a;3.5、抽象类的注意事项&#xff1a; 一、接口 1.1、接口的概念 1.2、接口的作用&#xff1a; 1.3、接口应用&#xff…

自适应网站建站源码系统 带完整的安装代码包以及搭建教程

在当今数字化时代&#xff0c;拥有一个功能全面且能够适应不同设备的网站对于企业和个人来说至关重要。罗峰给大家分享一款全新的自适应网站建站源码系统&#xff0c;它不仅提供了完整的安装代码包&#xff0c;还附带了详细的搭建教程&#xff0c;帮助用户轻松构建出具有响应式…

Atcoder ABC340 C - Divide and Divide

Divide and Divide&#xff08;分而治之&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例…

Windows制作Ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在Windows10中制作Ubuntu22.04的U盘启动盘 一、下载Ubuntu22.04的iso文件 在浏览器中输入https://ubuntu.com去Ubuntu官网下载Ubuntu22.04的iso文件 二、下载Ultraiso 在浏览器中输入https://www.ultraiso.com进入ultraiso官网 点击FREE TRIAL&a…

编程笔记 html5cssjs 085 JavaScript 内置函数

编程笔记 html5&css&js 085 JavaScript 内置函数 一、内置函数二、内置对象三、函数和方法之间的区别 内置函数是JavaScript语言本身提供的&#xff0c;无需定义即可直接使用的函数。它们在全局作用域中可用&#xff0c;并且在处理常见任务时提供了便利。 一、内置函数…

com.alibaba.fastjson.JSONException: toJSON error的原因

问题&#xff1a; 导出接口报错&#xff0c;显示json格式化异常 发现问题&#xff1a; 第一个参数为HttpResponse,转换成json的时候报错 修改方法&#xff1a; 1.调换两个参数的位置 2.在aop判断里边 把ServletAPI过滤掉 Before("excudeWebController()")pub…

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…

【软考问题】-- 3 - IT知识 - 信息系统治理

一、基础问题 问题1:IT治理主要目标包括哪三个方面? 1⃣️与业务目标一致2⃣️有效利用信息与数据资源3⃣️风险管理问题2:IT治理的管理层次大致可分为三层是什么? (1)最高管理层(2)执行管理层(3)业务与服务执行层问题3:IT 治理和谐内容有哪些? a.组织职责

力扣145 二叉树的后序遍历 Java版本

文章目录 题目描述递归解法代码 非递归解法思路代码 题目描述 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出…

设计模式(六):模板方法模式(行为型模式)

Template Method&#xff0c;模板方法&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一 些步骤延迟到子类中&#xff0c;TemplateMethod使得子类可以不改变一个算法的结构即 可以重定义该算法得某些特定步骤。 举例说明 奶茶制作过程&#xff0c;第一步加牛奶&…

计算机就业初调研

对于一个本科生而言&#xff0c;早早就收获了保研资格&#xff0c;那么摆在眼前的就是是否要放弃保研机会&#xff1f;不过看到当今计算机的就业情况&#xff0c;加上本科学历的贬值&#xff0c;想要放弃到手的保研机会&#xff0c;既有些不合理&#xff0c;也有些心疼&#xf…

Linux【动静态库】

目录 1.软硬链接 1.1软硬链接的语法 1.2理解软硬链接 1.3目录文件的硬链接 1.4应用场景 1.5ACM时间 2.动静态库 2.1认识库 3.制作静态库 3.1静态库打包 3.2静态库的使用 4.制作动态库 4.1动态库打包 4.2动态库的链接使用 4.3动态库的链接原理 总结&#xff1…