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

2023-11-12

题目:

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:

    3
    / \
  9  20
      /  \
   15   7

思路:后序数组尾元素是根节点,根据根节点可以在中序数组中找到其左右子树长度,若右子树存在,那么后序数组中尾元素前一个元素就是其右孩子,若左子树存在,那么从尾元素向前移动"右子树长度"个位置的节点就是其左孩子。递归上述过程直到所有节点都被插入树中。

//用来记录中序遍历中各个元素的下标 
map<int,int> Index; 
TreeNode* buildTree(vector<int> pos,int point,vector<int> in,int left,int right) 
{
	if(left>right)
		return NULL;
	TreeNode* root = new TreeNode(pos[point]);
	int index = Index[pos[point]];
	//右子树长度 
	int rlen = right-index;
	//为根节点左右孩子赋值 
	root->left = buildTree(pos,point-rlen-1,in,left,index-1);
	root->right = buildTree(pos,point-1,in,index+1,right);
	return root;   
}
TreeNode* buildTree(vector<int>& inorder,vector<int>& postorder) 
{
	int len = inorder.size();
    if(len==0)
		return NULL;
	for(int i=0;i<len;i++)
		Index[inorder[i]] = i;
	return buildTree(postorder,len-1,inorder,0,len-1);		    
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从中序与后序遍历序列构造二叉树 的相关文章

  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 在 C 中使用枚举而不是 #defines 作为编译时常量是否合理?

    在 C 工作了一段时间后 我将回到 C 开发领域 我已经意识到 在不必要的时候应该避免使用宏 以便让编译器在编译时为您做更多的工作 因此 对于常量值 在 C 中我将使用静态 const 变量或 C 11 枚举类来实现良好的作用域 在 C 中
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我

随机推荐

  • SDRAM操作说明——打开DDR3的大门

    SDRAM synchronous dynamic random access memory 同步动态随机存储器 所谓同步就是指需要时钟信号来控制命令数据 动态是指存储阵列需要不断地刷新来保证数据不会丢失 随机是指存取数据可以根据需要在不同
  • 参考文献中英文人名_参考文献英文名字应该怎么写?

    展开全部 名字的缩写 学位的缩写只有PhD MD BD等 英文文献好像是不标学位的 对于英文参考文献 还应注意以e5a48de588b662616964757a686964616f31333431363664下两点 1 作者姓名采用 姓在前
  • Omni Core v0.11.0 rpc-api

    JSON RPC API Omni Core 是 Bitcoin Core 的一个分支 在上面添加了 Omni 协议功能支持作为一个新的功能层 因此 与 API 的交互以与比特币核心相同的方式 JSON RPC 完成 只需使用额外的 RPC
  • 8.1.2-elasticsearch文本解析之自定义分词器及分词器匹配规则

    创建自定义analyzer 在具体的业务场景当中可能内置的analyzer并不能满足需求 这就需要能够自定义analyzer 前文已经说过analyzer由3部分组成 自定义analyzer就是通过配置以下三部分内容来实现的 序号 子构件
  • 这 13 种职业用AI提效的 40 类场景盘点

    随着人工智能技术的发展 职业领域出现了诸如我们 小蜜蜂助手Beezy 等神奇的工具 大幅度提升了各行各业里从业人员的工作效率 笔者今天将详述13种常见职业 分别是如何利用这些工具在实际工作过程中来帮助自己提升效率的 大量干货和私藏宝藏小工具
  • 7年经验之谈 —— Web测试是什么,有何特点?

    Web测试是指对Web应用程序进行验证和评估的过程 以确保其功能 性能和安全性符合预期 Web测试具体包括以下几个方面的内容 功能测试 验证Web应用程序是否按照需求规格说明书中定义的功能正常工作 功能测试包括输入验证 表单提交 页面导航
  • jmeter之命令行模式(Non-GUI Mode )

    新浪围脖 gt o蜗牛快跑o 企鹅交流群 gt 79642549 命令行模式优势 适用于Windows和linux执行机 与os无关 命令行容易扩展 比如上集成到jenkins平台 用命令行更加容易 适用于高并发测试 测试开始时 conso
  • 中后序遍历构建二叉树与应用I

    目录 题目描述 思路分析 AC代码 题目描述 按中序遍历和后序遍历给出一棵二叉树 求这棵二叉树中叶子节点权值的最小值 输入保证叶子节点的权值各不相同 输入 测试数据有多组 对于每组测试数据 首先输入一个整数N 1 lt N lt 10000
  • 计算机视觉的延伸整理

    目录 计算机视觉 数字图像处理 模式识别 机器学习 数据挖掘 监督学习和无监督学习 强化学习 数据建模 马尔科夫决策过程 计算机视觉 计算机视觉是一门涉及数字图像处理 模式识别和机器学习等技术的交叉学科 旨在将计算机技术应用于对视觉信息的理
  • 【51单片机】LD3320A语音识别控制设计

    文章目录 一 主要功能 二 硬件资源 1 硬件准备 2 硬件连接 三 软件设计 1 软件结构 2 主要代码 四 实验现象 联系作者 一 主要功能 系统运行后 当对语音模块说出 小易小易 时 收到回复信息后 开始说出控制指令 项目中已设计 开
  • 数值计算软件有哪些?一款国产软件非常亮眼。

    数值计算软件有哪些 一款国产软件非常亮眼 数学软件由算法标准程序发展而来 大致形成于70年代初期 随着几大数学软件工程的开展 如美国的NATS工程 人们探索了产生高质量数学软件的方式 方法和技术 经过长期积累 已有丰富的 涉及广泛数学领域的
  • 2023手把手教你视频剪辑,学会后不用担心不会剪辑了,不用真人露脸!

    前段时间发布了几期有关剪辑的内容 收到不少粉丝小伙伴的留言 说自己很想做自媒体 现在遇到的最大的难题就是如何剪辑好视频作品 今天就来出这一期的基本教学 只分享今天这一次 如果感兴趣记得点赞评论和关注 有不懂的地方记得在评论区下方留言新手 我
  • 精心收集了60个C语言项目源码,分享给大家

    C语言文章更新目录 C C 学习资源 百度云盘链接 计算机二级资料 过级专用 C语言学习路线 从入门到实战 编写C语言程序的7个步骤和编程机制 C语言基础 第一个C程序 C语言基础 简单程序分析 VS2019编写简单的C程序示例 简单示例
  • node学习之express(1)

    1 前提是你安装了node npm 2 此次我学习的网站是 汇智网 3 创建一个项目学习 npm init 按照提示 输入 不输入 项目的一些信息 安装express模块 npm install express save
  • 风之幻想

    风之幻想 是我的一个练习项目 业余时间开发 用于自己的技术练习 同时也希望可以最终成为一款独立游戏 时间 2020 03 03 技能 落叶飞花完成 目前对于大量落叶的操纵还需要优化 避免一些不必要的坐标转换操作提升性能 否则效果不佳 风之幻
  • 数字电路设计之仿真时碰到的小问题

    第一点 初始化 XXX 10 i datain lt PUSH 9 b000001111 10 i datain lt SUB0 gr3 gr1 gr0 80 i datain lt SUB1 gr3 gr1 gr0 这一段中的80的延时居
  • 使用 Spring Boot 集成 Nacos

    使用 Spring Boot 集成 Nacos 在本篇博客中 我们将介绍如何使用 Spring Boot 框架来集成 Nacos 实现服务的注册与发现 Nacos 是一个开源的动态服务发现 配置和服务管理平台 能够帮助我们构建和管理微服务架
  • 在SpringBoot项目中整合SpringSession,基于Redis实现对Session的管理和事件监听

    1 SpringSession简介 SpringSession是基于Spring框架的Session管理解决方案 它基于标准的Servlet容器API 提供了Session的分布式管理解决方案 支持把Session存储在多种场景下 比如内存
  • Bert Pretrain

    预训练过程使用了Google基于Tensorflow发布的BERT源代码 首先从原始文本中创建训练数据 由于本次比赛的数据都是ID 这里重新建立了词表 并且建立了基于空格的分词器 class WhitespaceTokenizer obje
  • 从中序与后序遍历序列构造二叉树

    题目 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 15 7