题目传送门:https://pintia.cn/problem-sets/994805342720868352/problems/994805485033603072

目录

题目解释:

解题思路:

ac代码:

题目解释:


给出一棵二叉树(binary tree)的后序(postorder)遍历和中序(inorder)遍历,要求重建这棵二叉树,并输出这棵二叉树的层序遍历序列。

解题思路:


《算法笔记》P297,重建后输出就行,调用create和bfs函数,使代码清晰一些,注意输出格式

ac代码:


#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
struct node{int data;node* lchild;node* rchild;
};
int pre[50],in[50],post[50];//先序,中序,后序
int n;//全局变量
node* create(int postl,int postr,int inl,int inr)
{int k;if(postl>postr)return NULL;node* root=new node;root->data=post[postr];for(k=inl;k<=inr;k++)if(in[k]==post[postr])break;int numleft=k-inl;root->lchild=create(postl,postl+numleft-1,inl,k-1);//左子树root->rchild=create(postl+numleft,postr-1,k+1,inr);//右子树return root;}
void bfs(node* root)
{int num=0;queue<node* > q;q.push(root);while(!q.empty()){node* now=q.front();q.pop();printf("%d",now->data);num++;if(num<n)printf(" ");if(now->lchild!=NULL) q.push(now->lchild);if(now->rchild!=NULL) q.push(now->rchild);}
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&post[i]);for(int i=0;i<n;i++)scanf("%d",&in[i]);node* root=create(0,n-1,0,n-1);bfs(root);return 0;
}

PAT-A1020:Tree Traversal(二叉树的重建及其中序、后序遍历)相关推荐

  1. 先序中序后序两两结合重建二叉树

    遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次.由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转 ...

  2. 用前序中序创建二叉树(用中序后序创建二叉树)

    定义二叉树结点 比如就拿这个二叉树 前序中序创建 因为前序遍历的顺序是 根 , 左 ,右. 中序的遍历是 左 根 右. 我们会很不好想,但我们可以用前序和中序把上面那个二叉树的遍历一边 前序遍历:AB ...

  3. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  4. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  5. 前序中序、中序后序以及前序后序构造二叉树

    文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...

  6. 序列化和反序列化二叉树 -----前序,中序,后序,层序

    目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...

  7. 二叉树的前、中、后序遍历

    所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...

  8. 二叉树 ---- 前序 中序 后序 知二求一

    二叉树 ---- 前序 中序 后序 知二求一 先说一下什么是二叉树的前中后序; 根:根节点 左代表遍历左子树 右代表遍历右子树 前序:根-左---右 中序:左-根---右 后序:左-右---根 如图求 ...

  9. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

  10. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

最新文章

  1. 海思3559A上编译GDB源码操作步骤及简单使用
  2. linux消息通信无法接收,进程间通信:消息队列有关问题:进程1接收不到进程2的消息...
  3. JavaScript中的基本数据类型与引用数据类型
  4. write up::web 实战2-注入 --sqlmap注入版
  5. 1.1 lambda表达式
  6. python mss_Python实现的连接mssql数据库操作示例
  7. Javascript 的模块化编程及加载模块【转载+整理】
  8. html页面跳转时导航栏不变_解决Vue-iview封装导航栏刷新,导航栏消失之坑
  9. mysql limit 不起作用_这句mysql中为什么limit起不到作用
  10. 蓝桥训练之前缀和与差分
  11. springboot 项目里使用spring.xml文件
  12. 算法导论第三版 17.1-2习题答案
  13. Selenium元素定位神器工具谷歌浏览器插件-SelectorsHub介绍、安装和使用
  14. python中label函数_让Label像Button一样可以点击
  15. java将多个文件转成压缩包下载
  16. 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树
  17. 幸运大转盘-jQuery+Java实现的抽奖程序
  18. java获取下月末,java获取每月月末日期
  19. 安装 ABAQUS2020时出错
  20. 输出n以内的所有质数到文本文件

热门文章

  1. 开源版多用户博客系统
  2. python 导出为csv_批量导出SolidWorks模型点坐标值
  3. linux内核数据链路层,基于Linux数据链路层的MPI集群通信机制的设计与实现-嵌入式系统-与非网...
  4. android实战技巧,实战技巧:Android异步指南
  5. linux 删除压缩包_【干货】记住!这些 Linux 命令千万不要运行!
  6. 【转】echarts x轴标签文字过多导致显示不全
  7. WPF-创建超链接文本
  8. C++高级进阶 第二季:mutable 关键字
  9. [xmind] ASP.NET 设计模式 - UX 用户体验
  10. dev grdicontrol 根据条件改变行颜色,字体颜色等