当前位置: 首页 > news >正文

【算法】递归+深搜:105.从前序与中序遍历序列构造二叉树

目录

1、题目链接

2、题目介绍

​​3、解法

函数头-----找出重复子问题

函数体---解决子问题

4、代码


1、题目链接

105.从前序与中序遍历序列构造二叉树. - 力扣(LeetCode)


2、题目介绍


3、解法

前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子树 ] 排序。
中序遍历性质: 节点按照 [ 左子树 | 根节点 | 右子树 ] 排序。


因此,我们可以利用前序确定二叉树的根节点,中序遍历确定左、右子树的结点数。

  1. 前序遍历的首元素 为 树的根节点 node 的值。
  2. 在中序遍历中搜索根节点 node 的索引 ,可将 中序遍历 划分为 [ 左子树 | 根节点 | 右子树 ] 。
  3. 根据中序遍历中的左(右)子树的节点数量,可将 前序遍历 划分为 [ 根节点 | 左子树 | 右子树 ] 。

函数头-----找出重复子问题

重复子问题:前序构建二叉树。(根节点、左子树根节点、右子树根节点)

参数: 根节点在前序遍历的索引 root 、子树在中序遍历的左边界 left 、子树在中序遍历的右边界 right 

函数体---解决子问题

1、构建根节点、

2、找出根节点在中序遍历中对应的下标 " i "(利用哈希表进行辅助),划分左、右子树

3、构建左子树(更新参数root、left、right)

4、构建右子树(更新参数root、left、right)


 

4、代码


class Solution {public:unordered_map<int, int> hash; //哈希表,便于寻找inorder中根节点的下标//参数: 前序,根节点对应的在前序的下标,左子树起始位置(中序),右子树结束位置(中序)TreeNode* dfs(const vector<int>& preorder, int root, int left, int right) {if (left > right)//左右子树都为空{return NULL;}//构建根节点TreeNode* BTroot = new TreeNode(preorder[root]);int inorder_root = hash[preorder[root]]; //根节点对应的在中序的下标//构建左右子树BTroot->left = dfs(preorder, root + 1, left, inorder_root - 1);//右子树的根节点下标(前序)= root +left_Tree_size +1 ( inorder_root - left + root +1)BTroot->right = dfs(preorder, inorder_root - left + root + 1, inorder_root + 1, right);return BTroot;}TreeNode* buildTree(const vector<int>& preorder, vector<int>& inorder) {//inorder填充hashfor (int i = 0; i < inorder.size(); i++){hash[inorder[i]] = i;}return dfs(preorder, 0, 0, inorder.size() - 1);}
};

相关文章:

【算法】递归+深搜:105.从前序与中序遍历序列构造二叉树

目录 1、题目链接 2、题目介绍 ​​3、解法 函数头-----找出重复子问题 函数体---解决子问题 4、代码 1、题目链接 105.从前序与中序遍历序列构造二叉树. - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 ​ 3、解法 前序遍历性质&#xff1a; 节点按照 [ 根节点 …...

ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale

背景&#xff1a;IDF版本V5.1.2 &#xff0c;配置ESP32 通用定时器&#xff0c;实现100HZ&#xff0c;占空比50% 的PWM波形。 根据乐鑫官方的IDF指导文档设置内部计数器的分辨率&#xff0c;计数器每滴答一次相当于 1 / resolution_hz 秒。 &#xff08;ESP-IDF编程指导文档&a…...

基于Python的旅游景点推荐系统

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

【开源社区】ELK 磁盘异常占用解决及优化实践

1、问题及场景描述 本文主要讨论在 CentOS环境下基于 rpm 包部署 ELK 系统磁盘异常占用的问题解析和解决方案。 生产问题描述&#xff1a;以下问题现实场景基于ELK体系下&#xff0c;ES服务的磁盘占用问题解析。默认情况下&#xff0c;基于 RPM 安装的 Elasticsearch 服务的安…...

达梦数据守护集群_动态增加实时备库

目录 1、概述 2、实验环境 2.1环境信息 2.2配置信息 2.3 查看初始化参数 3、动态增加实时备库 3.1数据准备 3.2配置新备库 3.3动态增加MAL配置 3.4 关闭守护进程及监视器 3.5修改归档&#xff08;方法1&#xff1a;动态添加归档配置&#xff09; 3.6 修改归档&…...

计算机基础:Ping、Telnet和SSH

文章目录 PingTelnetSSLSSH隧道 Ping Ping和Telnet是两种常见的网络工具&#xff0c;它们分别用于测试网络连接和检查服务端口的连通性。 Ping是一种网络工具&#xff0c;用于测试主机之间的连通性。它通过发送ICMP&#xff08;Internet Control Message Protocol&#xff09…...

Java教学新动力:SpringBoot辅助平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理教学辅助平台的相关信息成为必然。开发合适…...

24/11/3 算法笔记 Adam优化器拆解

Adam 优化器是一种用于深度学习中的自适应学习率优化算法&#xff0c;它结合了两种其他流行的优化方法的优点&#xff1a;RMSprop 和 Momentum。简单来说&#xff0c;Adam 优化器使用了以下方法&#xff1a; 1. **指数加权移动平均&#xff08;Exponentially Weighted Moving …...

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中&#xff0c;我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力&#xff0c;大模型的分布式训练得以化繁为简。 然而&#xff0c;企业又该如何将训练完成的模型实际应用部署&#xff0c;持续优化服务吞吐性能&#xf…...

【大数据学习 | kafka高级部分】kafka中的选举机制

controller的选举 首先第一个选举就是借助于zookeeper的controller的选举 第一个就是controller的选举&#xff0c;这个选举是借助于zookeeper的独享锁实现的&#xff0c;先启动的broker会在zookeeper的/contoller节点上面增加一个broker信息&#xff0c;谁创建成功了谁就是主…...

MySQL limit offset分页查询可能存在的问题

MySQL limit offset分页查询语句 有 3 种形式&#xff1a; limit 10&#xff1a;不指定 offset&#xff0c;即 offset 0 &#xff0c;表示读取第 1 ~ 10 条记录。limit 20, 10&#xff1a;offset 20&#xff0c;因为 offset 从 0 开始&#xff0c;20 表示从第 21 条记录开始…...

CODESYS可视化桌面屏保-动态气泡制作详细案例

#一个用于可视化(HMI)界面的动态屏保的详细制作案例程序# 前言: 在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows…...

华为 Atlas500 Euler 欧拉系统操作指南

华为 Atlas500 Euler 欧拉系统操作指南 ssh root连接 找到Atlas500的IP地址&#xff0c;如&#xff1a;192.168.1.166 账号/密码&#xff1a;admin/Huawei123 root/密码&#xff1a;Huawei123456 #直接使用root ssh连接 这里受限不让直接用root连接 ssh root192.168.1.116 #…...

Chromium127编译指南 Mac篇(六)- 编译优化技巧

1. 前言 在Chromium127的开发过程中&#xff0c;优化编译速度是提升开发效率的关键因素。本文将重点介绍如何使用ccache工具来加速C/C代码的编译过程&#xff0c;特别是在频繁切换分支和修改代码时。通过合理配置和使用这些工具&#xff0c;您将能够显著减少编译时间&#xff…...

《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列

《TCP/IP网络编程》学习笔记 | Chapter 3&#xff1a;地址族与数据序列 《TCP/IP网络编程》学习笔记 | Chapter 3&#xff1a;地址族与数据序列分配给套接字的IP地址和端口号网络地址网络地址分类和主机地址边界用于区分套接字的端口号数据传输过程示例 地址信息的表示表示IPv4…...

C++ | Leetcode C++题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; class Solution { public:int dp[100][100][100];int removeBoxes(vector<int>& boxes) {memset(dp, 0, sizeof dp);return calculatePoints(boxes, 0, boxes.size() - 1, 0);}int calculatePoints(vector<int>& boxes…...

day05(单片机)SPI+数码管

目录 SPI数码管 SPI通信 SPI总线介绍 字节交换原理 时序单元 ​​​​​​​SPI模式 模式0 模式1 模式2 模式3 数码管 介绍 74HC595芯片分析 ​​​​​​​原理图分析 ​​​​​​​cubeMX配置​​​​​​​ 程序编写 硬件SPI ​​​​​​​软件SPI 作业&#xff1a; SPI数…...

Android Framework AMS(13)广播组件分析-4(LocalBroadcastManager注册/注销/广播发送处理流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读广播组件的广播发送过程。关注思维导图中左上侧部分即可。 有了前面普通广播组件 注册/注销程/广播组件的发送广播流程分析的基础&…...

模糊理论与模糊集概述

1. 模糊集 1️⃣ μ A : U → [ 0 , 1 ] \mu_A:U\to{[0,1]} μA​:U→[0,1]&#xff0c;将任意 u ∈ U u\in{}U u∈U映射到 [ 0 , 1 ] [0,1] [0,1]上的某个函数 模糊集&#xff1a; A { μ A ( u ) , u ∈ U } A\{\mu_A(u),u\in{}U\} A{μA​(u),u∈U}称为 U U U上的一个模糊集…...

基于STM32的实时时钟(RTC)教学

引言 实时时钟&#xff08;RTC&#xff09;是微控制器中的一种重要功能&#xff0c;能够持续跟踪当前时间和日期。在许多应用中&#xff0c;RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能&#xff0c;通过示例代码实现当前时间的读取和显示。 环…...

自动驾驶汽车三维路径规划与路径跟踪控制方法【附代码】

✨ 长期致力于自动驾驶汽车、三维路径规划、路径跟踪控制、深度强化学习、预瞄跟随、模糊推理、神经网络模型预测控制研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff0…...

工业无线通信实战:基于IO-Link Wireless模块的传感器开发指南

1. 项目概述&#xff1a;当无线通信遇上工业传感器在工业自动化领域&#xff0c;设备间的通信就像工厂的神经系统&#xff0c;而传感器和执行器就是最末梢的触觉和肌肉。传统上&#xff0c;这些“神经末梢”通过有线方式连接&#xff0c;一根根电缆如同血管&#xff0c;虽然可靠…...

RK3576+Hailo-8异构计算:破解高帧率摄像头实时AI分析算力瓶颈

1. 项目概述&#xff1a;从“看得见”到“看得懂”的实时化挑战最近在折腾一个智能安防的项目&#xff0c;客户提了个听起来简单但做起来挠头的要求&#xff1a;他们希望摄像头不仅能24小时不间断录像&#xff0c;还要能“实时”分析画面里发生的事——比如识别出有人闯入、车辆…...

微信AI机器人终极指南:如何用开源工具打造智能群聊助手

微信AI机器人终极指南&#xff1a;如何用开源工具打造智能群聊助手 【免费下载链接】wechat-bot &#x1f916;一个基于 WeChaty 结合 ChatGPT / Claude / Kimi / DeepSeek / Ollama等Ai服务实现的微信机器人 &#xff0c;可以用来帮助你自动回复微信消息&#xff0c;或者社群分…...

“零关税”为中非合作装上“加速器”

科特迪瓦和加纳的醇香可可、肯尼亚的精品咖啡与鲜润牛油果、南非的清甜柑橘与醇厚红酒……5月1日起&#xff0c;这些“非洲好物”搭乘零关税“直通车”进入中国市场。这一天&#xff0c;中国面向20个不属于最不发达国家的非洲建交国实施零关税、为期2年&#xff0c;从而实现对5…...

如何用一套键盘鼠标控制多台电脑:Input Leap跨平台KVM终极指南

如何用一套键盘鼠标控制多台电脑&#xff1a;Input Leap跨平台KVM终极指南 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 你是否厌倦了在办公桌上摆满多个键盘鼠标&#xff0c;每次切换设备都要重新调…...

CP2K实战指南:CUTOFF与REL_CUTOFF参数的系统化调优策略

1. 理解CUTOFF与REL_CUTOFF的核心作用 刚开始用CP2K做材料计算时&#xff0c;最让我头疼的就是MGRID里这两个参数。记得第一次跑硅晶体能量优化&#xff0c;结果比文献值差了近10%&#xff0c;导师指着屏幕问&#xff1a;"你的网格精度设对了吗&#xff1f;"当时真是…...

FreeRDP 终极指南:跨平台远程桌面完全解决方案

FreeRDP 终极指南&#xff1a;跨平台远程桌面完全解决方案 【免费下载链接】FreeRDP FreeRDP is a free remote desktop protocol library and clients 项目地址: https://gitcode.com/gh_mirrors/fr/FreeRDP FreeRDP 是一款功能强大的开源远程桌面协议实现库&#xff0…...

企业级应用如何借助Taotoken实现大模型API的容灾与负载均衡

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级应用如何借助Taotoken实现大模型API的容灾与负载均衡 在构建依赖大模型能力的企业级应用时&#xff0c;服务的连续性与稳定性…...

别再为VMware里Kali上不了网发愁了!三种网络模式(桥接/NAT/仅主机)保姆级配置与排错指南

VMware中Kali Linux网络配置全攻略&#xff1a;从原理到实战排错 当你第一次在VMware中启动Kali Linux准备大展身手时&#xff0c;却发现连最基本的网络连接都无法建立——这种挫败感我深有体会。作为网络安全学习和渗透测试的必备工具&#xff0c;Kali在虚拟机中的网络配置往往…...