leetcode106 从中序与后序遍历序列构造二叉树

embedded/2025/3/26 4:36:33/

中序遍历的根节点左侧是左子树,右侧是右子树,后序遍历的最后一个元素为根节点。

在中序遍历中找到根节点,从而找到左右子树,知道左右子树的范围,从而后序遍历中的左右子树也就确定好了。

然后分别对左右子树用同样的方式递归构造下去。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {unordered_map<int, int> inorder_map;for(int i = 0; i < inorder.size(); i++){inorder_map[inorder[i]] = i;}return buildTreeHelper(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1, inorder_map);}
private:TreeNode* buildTreeHelper(vector<int>& inorder, int in_start, int in_end, vector<int>& postorder, int post_start, int post_end, unordered_map<int, int>& inorder_map){if(in_start > in_end || post_start > post_end) return nullptr;int rootVal = postorder[post_end];TreeNode* root = new TreeNode(rootVal);int midIndex = inorder_map[rootVal];int leftTreeSize = midIndex - in_start;root->left = buildTreeHelper(inorder, in_start, midIndex - 1, postorder, post_start, post_start + leftTreeSize - 1, inorder_map);root->right = buildTreeHelper(inorder, midIndex + 1, in_end, postorder, post_start + leftTreeSize, post_end - 1, inorder_map);return root;}
};


http://www.ppmy.cn/embedded/175009.html

相关文章

实战指南:智慧水厂管理平台搭建全流程解析(二)

【上期内容】我们重点解析了智慧水务管理平台的五大核心模块&#xff1a;管理驾驶舱、资产管理、库存管理、水质分析、能耗分析。 【本期内容】我们将继续深入探讨智慧水务管理平台的进阶功能模块&#xff1a;工艺流程图、系统配电、电器设备状态、监控查看、GIS地图。 ⬇️智慧…

Spark 中agg的用法

在 Spark 中&#xff0c;agg 是用于对 DataFrame 进行聚合操作的函数。它可以同时对多个列应用多个聚合函数&#xff0c;并返回一个新的 DataFrame。agg 通常与 groupBy 结合使用&#xff0c;用于对分组后的数据进行聚合操作。 以下是 agg 的详细用法和示例。 1. agg 的基本用…

用ArcGIS做一张符合环评要求的植被类型图

植被类型图是环境影响评价&#xff08;环评&#xff09;中的重要图件&#xff0c;需满足数据准确性、制图规范性和信息完整性等要求。本教程将基于ArcMap平台&#xff0c;从数据准备到成果输出&#xff0c;详细讲解如何制作符合环评技术规范的植被类型图。 ArcGIS遥感解译土地…

华为IFS财经变革(51页PPT)(文末有下载方式)

资料解读&#xff1a;华为IFS财经变革 详细资料请看本解读文章的最后内容。 华为作为全球领先的通信技术公司&#xff0c;其财经变革&#xff08;IFS&#xff0c;Integrated Financial Services&#xff09;是其管理变革的重要组成部分。本文将从变革的动因、目标、实施路径及…

STM32基本GPIO控制

目录 1.GPIO基础知识 1.1系统架构 2. IO八种工作模式 2.1STM32 IO工作模式 2.2GPIO的输出速度 3.固件库实现LED点灯 3.1LED灯 LED灯&#xff0c;是一种能够将电能转化为可见光的半导体期间 3.2.控制LED灯 4.STM32控制蜂鸣器 1.蜂鸣器的种类 2.蜂鸣器的控制方式 3.软…

Java设计模式之命令模式(Command Pattern)

命令模式是一种行为型设计模式,它将请求封装为独立的对象,使得不同请求的调用、队列化、日志记录或撤销操作成为可能。该模式通过解耦请求的发送者与接收者,增强系统的灵活性和扩展性。 1. 模式定义 核心思想:将请求转换为包含所有请求信息的独立对象(命令),支持参数化…

【负载均衡系列】Nginx

1. 工作原理 ​事件驱动模型: 基于异步非阻塞 I/O(如 Linux 的 epoll、BSD 的 kqueue),高效处理高并发连接。单线程可处理数千并发请求,避免传统多线程模型的资源竞争问题。​多进程架构: ​主进程(Master)​:管理配置加载、热升级、工作进程启停。​工作进程(Worker…

腾讯云golang一面面试题

1. Go 底层是否有自动回收对象的机制?(runtime.finalizer) Go 语言的垃圾回收机制(GC)会自动回收不再使用的对象。runtime.SetFinalizer 是 Go 的一个特性,允许为对象设置一个终结器(finalizer),当对象被垃圾回收时,会调用这个终结器。终结器通常用于释放资源,如关…