(PAT)L2-006 树的遍历 (二叉树构建)
题目链接:https://www.patest.cn/contests/gplt/L2-006
- 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
- 输入格式:
- 输入第一行给出一个正整数N(<=),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。
- 输出格式:
- 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
- 输入样例:
- 输出样例:
题意:给出一棵树的后序与中序遍历,输出层序遍历
方法:由中序遍历与后序遍历构建一棵树,再输出层序遍历
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<stack>
- #include<vector>
- #include<string>
- #include<algorithm>
- #include<queue>
- using namespace std;
- const int N=;
- #define met(a,b) memset(a,b,sizeof(a))
- int a[N],b[N];
- int tree[N];
- int sum[N];
- void build(int n,int la,int ra,int lb,int rb)///利用递归的方法建立二叉树
- {
- if(ra<la ||rb<lb)
- return ;
- if(la==ra)
- {
- tree[n]=a[la];
- return ;
- }
- for(int i=la; i<=ra; i++)
- {
- if(a[i]==b[rb])///后序遍历的最右边的为根节点,找到根节点在中序遍历的位置,
- ///该位置的后边的点为左子树,后边为右之树,以这个原理递归下去
- {
- tree[n]=b[rb];
- build(*n,la,i-,lb,lb+i--la);
- build(*n+,i+,ra,lb+i-la,rb-);
- break;
- }
- }
- }
- void bfs(int s)
- {
- queue<int>Q;
- Q.push(s);
- int ans=;
- while(Q.size())
- {
- int y=Q.front();
- Q.pop();
- if(tree[y]==) continue;
- sum[ans++]=tree[y];
- Q.push(*y);
- Q.push(*y+);
- }
- }
- int main()
- {
- int n;
- met(tree,);
- scanf("%d",&n);
- for(int i=; i<=n; i++)
- {
- scanf("%d",&b[i]);
- }
- for(int i=; i<=n; i++)
- {
- scanf("%d",&a[i]);
- }
- build(,,n,,n);
- bfs();
- for(int i=;i<=n;i++)
- {
- printf("%d%c",sum[i],i==n?'\n':' ');
- }
- return ;
- }
(PAT)L2-006 树的遍历 (二叉树构建)的更多相关文章
- PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集
L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的 ...
- PAT甲级专题|树的遍历
PAT甲级专题-树的遍历 涉及知识点:树.建树.深度优先搜索.广度优先搜索.递归 甲级PTA 1004 输出每一层的结点,邻接表vector建树后.用dfs.bfs都可以边搜边存当前层的数据, #in ...
- GPTL—练习集—006树的遍历
#include<bits/stdc++.h> using namespace std; typedef int daTp;//datatype typedef struct BTNode ...
- pat -1004(树的遍历)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路: (1)用vector记录每 ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...
- PTA 7-10 树的遍历(二叉树基础、层序遍历、STL初体验之queue)
7-10 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数 ...
- pat L2-006. 树的遍历
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- 团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树
L2-006. 树的遍历 #include <stdio.h> #include <stdlib.h> #include <string.h> #include & ...
随机推荐
- JS闭包作用域解析
什么是闭包? 简单理解,当在一个函数的外部访问函数内部定义的变量的时候就会形成一个闭包,由这个理解可以知道,当一个函数执行完成的时候,一般情况下,其作用域会被销毁,其内部定义的变量也会变得不可访问,所 ...
- Java开发笔记(九)赋值运算符及其演化
前面的加减乘除四则运算,计算结果通过等号输出给指定变量,注意此时代码把变量放到等号左边.而在算术课本里,加法运算的完整写法类似于“1+1=2”这样,运算结果应该跟在等号右边.不过代数课本里的方程式存在 ...
- 如何用java控制你的电脑?
用java控制你的电脑 java,是一门强大的语言,强大的地方在于有很多类,我们可以直接的使用.而java.awt.Robot就很有意思了,顾名思义robot机器人,怎样一个机器法,如:控制鼠标方法: ...
- (一)MYSQL ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (111) 解决方法
今天在测试MySQL的连接时候,发现连接不通过,并报错ERROR 2003 (HY000): Can't connect to mysql server on '192.168.10.210' (11 ...
- idea打jar包并部署java web项目
1.idea打jar包 (idea提供界面是jar包方式) 点击package,结束就OK,jar包一般放在target里面 部署项目 1.停止之前的服务: 查到到java的所有进程:ps -ef|g ...
- 深海中的STL—mt19937
mt19937 当你第一眼看到这玩意儿的时候 肯定禁不住吐槽:纳尼?这是什么鬼? 确实,这个东西鲜为人知,但是它却有着卓越的性能 简介 mt19937是c++11中加入的新特性 它是一种随机数算法,用 ...
- Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
微软动态CRM专家罗勇 ,回复300或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 安装好Dynamic ...
- SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?
SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证? 1, MI01 create a physical inventory document, 2, MI04 to inpu ...
- Python进阶之模块
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...
- SQL SERVER 执行动态SQL EXEC
:普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N's ...