根据后序和中序求二叉树的层序

题目描述:给出二叉树的后序和中序序列,输出二叉树的层序遍历序列。

题目分析:中序遍历为左根右,后序遍历为左右根,所以后序遍历的最后一个节点为根节点,在中序遍历上找出根节点的位置,将树分为左右两个子树。

使用 in[],post[] 存储中序后后序序列。假设某个分支二叉树中序区间为[inL, inR],后序区间为[postL,postR],那么post[postR]就为该树的根节点,根据根节点去中序中查找,找到根节点在中序中的位置为k。二叉树左子树的个数为numLeft=k-inL。左子树的中序区间为[inL,k-1],右子树的中序区间[k+1,inR];左子树的后序区间为[postL,postL+numLeft-1],右子树的后序区间为[postL+numLeft,postR-1]。

创建树时返回根节点的地址。最后层序遍历树,使用队列,从根节点开始,将节点入队,然后读队首,再出队直至队列为空。

代码如下:

#include <iostream>
#include <queue>
using namespace std;
const int N = 1010;
int in_order[N], post_order[N];
int n;struct node {int data;node *lchild;node *rchild;
};node *build(int inL, int inR, int postL, int postR) {if (inL > inR)return NULL;node *root;root = new node;root->data = post_order[postR];int k = inL;while (in_order[k] != root->data)k++;int numLeft = k - inL;root->lchild = build(inL, k - 1, postL, postL + numLeft - 1);root->rchild = build(k + 1, inR, postL + numLeft, postR - 1);return root;
}void bfs(node *root) {int num = 0;queue<node *>q;q.push(root);while (q.size()) {node *now = q.front();q.pop();cout << now->data;num++;if (num < n)cout << " ";if (now->lchild != NULL)q.push(now->lchild);if (now->rchild != NULL)q.push(now->rchild);}
}int main() {cin >> n;for (int i = 0; i < n; i++)cin >> in_order[i];for (int i = 0; i < n; i++)cin >> post_order[i];node *root = build(0, n - 1, 0, n - 1);bfs(root);return 0;
}

测试结果:
在这里插入图片描述

题目分析链接:
https://blog.csdn.net/weixin_39851956/article/details/105253197

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

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

相关文章

mysql数据剪切到新表_6、MySQL核心DDL语句

命令类型服务器端命令获取命令帮助数据库管理查看数据库基础变量SQL组成创建修改删除表管理创建示例一示例二示例三一个常见的创建表结构的示例表修改改名表结构修改添加/删除字段修改字段键管理索引索引管理视图视图操作命令类型服务器端命令DDL&#xff1a;数据定义语言&…

pycharm里面下载pip(不用去官网)

注意:pycharm版本较低的话右侧有个"",一样的效果

C++ stringstream输入方式

在题目中&#xff0c;我们有时候会遇到不知道要输入多少个元素&#xff0c;这个时候我们要怎么读取呢&#xff1f; 采用stringstream输入方式&#xff0c;头文件为< sstream > 代码如下&#xff1a; #include <iostream> #include <cstring> #include <…

基于.NET下的人工智能|利用ICSharpCore搭建基于.NET Core的机器学习和深度学习的本地开发环境...

每个人都习惯使用Python去完成机器学习和深度学习的工作&#xff0c;但是对于习惯于某种特定语言的人来说&#xff0c;转型不是那么容易的事。这两年我花了不少时间在Python&#xff0c;毕竟工作的重心也从移动开发转为机器学习和深度学习。感谢我的老板给我很大的空间去开拓新…

ValueError: check_hostname requires server_hostnamejie解决方案

原因: 1. 下载包带的插件等级高了 2. 网络代理没关 3.pip误删 解决方案: 对应上面原因: 1.终端(terminal)输入代码 pip install urllib31.25.112. 3.针对第三点 https://blog.csdn.net/weixin_53051556/article/details/118566675

万稞pw80线切割编程软件_模具设计编程培训哪些内容?

模具设计编程培训哪些内容&#xff1f;一&#xff0e;UG、PROE三维产品设计班1)产品设计流程&#xff1b;2)三维造型、各类产品结构设计3)产品表面处理工艺4)UG、PROE 3D造型、抄板、工程图、逆向工程、点云处理。5)100多套家电、医疗器械、汽车、手机、电动工具设计案例讲解二…

UVA - 548 Tree

输入一个二叉树的中序和后序遍历&#xff0c;请你输出一个叶子节点&#xff0c;该叶子节点到根的数值总和最小&#xff0c;且这个叶子是编号最小的那个。 输入&#xff1a; 您的程序将从输入文件中读取两行(直到文件结尾)。第一行是树的中序遍历值序列,第二行是树的后序遍历值序…

.NET Core开发实战(第14课:自定义配置数据源:低成本实现定制化配置方案)--学习笔记...

14 | 自定义配置数据源&#xff1a;低成本实现定制化配置方案这一节讲解如何定义自己的数据源&#xff0c;来扩展配置框架扩展步骤1、实现 IConfigurationSource2、实现 IConfigurationProvider3、实现 AddXXX 扩展方法&#xff0c;用来作为注入的快捷方式源码链接&#xff1a;…

uml类图例子_转:(中文命名)UML类图新手入门级介绍

下文转于 2019-05-10。2020-03-10 发觉本出自2007 年出版的《大话设计模式》一书&#xff08;作者: 程杰&#xff09;第一章。于是将文末原链接删去。转载注&#xff1a; 中文命名的优势在UML图这样专注业务逻辑且完全符号化语法&#xff08;与英语无关&#xff09;的工具中特别…

API是什么

定义: API 是用于构建应用程序软件的一组子程序定义&#xff0c;协议和工具。一般来说&#xff0c;这是一套明确定义的各种软件组件之间的通信方法。 接口interface: 各个组件发生交互的区域 协议protocol: 规定了各部分之间如何进行交流的一系列规则的集合 格式format: …

瓷砖铺放-dfs

题目描述 有一长度为N(1< &#xff2e;< 10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;另一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f; 例如&#xff0c;长度为4的地面一共…

2020年学python_Python学习路线图(2020年最新版)

PythonPython开发Python语言Python学习路线图(2020年最新版)这是我刚开始学习python时的一套学习路线&#xff0c;从入门到上手。(不敢说精通&#xff0c;哈哈~)希望对大家有帮助哈~一、Python入门、环境搭建、变量、数据类型二、Python运算符、条件结构、循环结构三、Python函…

开源、免费、企业级的SiteServer CMS .NET CORE 7.0 预览版发布

经过连续不断地开发与完善&#xff0c;SiteServer CMS .NET CORE 版本终于在今天与大家见面了&#xff0c;版本为7.0.0-preview1&#xff0c;我们将在未来几个月收集大家的反馈&#xff0c;修复与完善产品&#xff0c;最终发布能够稳定运行的7.0正式版。基于.NET CORE的跨平台性…

equals, hashCode, toString方法重写,深入探究equals

首先是超类Employee: package chapter5_inheritance.equals;import java.time.LocalDate; import java.util.Objects;public class Employee {private String name;private double salary;private LocalDate hireDay;public Employee(String name, double salary, int year, i…

UVA - 839 Not so Mobile

输入一个树状天平&#xff0c;根据力矩相等原则判断是否平衡。如图所示&#xff0c;所谓力矩相等&#xff0c;就是Wl DlWr Dr,其中Wl和Wr分别为左右两边砝码的重量&#xff0c;D为距离。 采用递归&#xff08;先序&#xff09;方式输入&#xff1a;每个天平的格式为Wl ,Dl,Wr,…

.NET Core 3.0 即将结束生命周期,建议迁移 3.1

.NET Core 官方发布博客&#xff0c;说明 .NET Core 3.0 即将结束生命周期&#xff0c;建议开发者迁移到 3.1 版本。.NET Core 3.0 于 2019 年 12 月 3 日发布&#xff0c;这是一个 Current 版本而不是 LTS 版本&#xff0c;将于今年 3 月 3 日 EOL&#xff08;End of Life&…

CoreJava 笔记总结-第三章 Java的基本程序设计结构

CoreJava 笔记总结 文章目录CoreJava 笔记总结第三章 Java的基本程序设计结构数据类型1. 整型2. 浮点类型3. char类型4. boolean类型变量与常量1. 变量2. 常量3. 枚举类型运算符关系和boolean运算符数学函数与常量强制类型转换字符串空串与null串码点与代码单元构建字符串输入与…

python高级编程知识点_(转)python 高级编程技巧学习笔记

转自https://www.jianshu.com/p/104cec085611&#xff0c;部分图出不来&#xff0c;mark一下&#xff0c;关键时候供查看。第二章 数据结构相关话题2.1、筛选数据两种方式filter函数&#xff1a;filter(lambda x: x>0, data)注意&#xff1a;python3 需要把filter的结果转为…

.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

15 | 选项框架&#xff1a;服务组件集成配置的最佳实践这一节讲解如何使用选项框架来处理服务和配置的关系选项框架的特性&#xff1a;1、支持单例模式读取配置2、支持快照3、支持配置变更通知4、支持运行时动态修改选项值在设计系统的时候需要遵循两个原则&#xff1a;1、接口…

UVA - 572 Oil Deposits-dfs找连通块

Discription 给定一个包含 *的二维数组&#xff0c;输出有几个是联通的&#xff0c;如果一个在另外一个相邻的八个方向则视作相邻。 Input 包含 *的二维数组。 Output 输出联通的个数 解题思路&#xff1a; 从每一个格子出发&#xff0c;递归遍历它周围的格子&#xff0c;每次…