PAT Advanced 1020 Tree Traversals (25 分)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
主要考查,中后遍历转前序,前中遍历建树,层序遍历树
#include <iostream>
#include <vector>
#include <queue> using namespace std; struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
}; vector<int> pre,in,post,ans;
queue<TreeNode*> que; void preOrder(int root,int start,int end){
if(start>end) return;
int i=;
while(i<=end&&in[i]!=post[root]) i++;
pre.push_back(post[root]);
preOrder(root--end+i,start,i-);
preOrder(root-,i+,end);
} TreeNode* buildTree(int root,int start,int end){
if(start>end) return NULL;
int i=;
TreeNode *t=new TreeNode();
while(i<=end&&in[i]!=pre[root]) i++;
t->val=pre[root];
t->left=buildTree(root+,start,i-);
t->right=buildTree(root++i-start,i+,end);
return t;
} void levelOrder(TreeNode *tree){
que.push(tree);
while(!que.empty()){
TreeNode *tmp=que.front();
ans.push_back(tmp->val);
que.pop();
if(tmp->left!=NULL) que.push(tmp->left);
if(tmp->right!=NULL) que.push(tmp->right);
} }
int main()
{
int N;
scanf("%d",&N);
post.resize(N);in.resize(N);
for(int i=;i<N;i++) scanf("%d",&post[i]);
for(int i=;i<N;i++) scanf("%d",&in[i]);
preOrder(N-,,N-);
TreeNode *tree=buildTree(,,N-);
levelOrder(tree);
for(int i=;i<ans.size();i++)
if(i!=ans.size()-) cout<<ans[i]<<" ";
else cout<<ans[i];
system("pause");
return ;
}
查看柳神博客,对代码修改,实际可以建立一个索引,这样就可以直接得到先序遍历的结果:
#include <iostream>
#include <vector>
#include <algorithm> using namespace std;
struct node{
int index;
int val;
};
bool cmp(node n1,node n2){
return n1.index<n2.index;
}
vector<int> in,post;
vector<node> ans; void preOrder(int root,int start,int end,int index){
if(start>end) return;
int i=;
while(i<=end&&in[i]!=post[root]) i++;
ans.push_back({index,post[root]});
preOrder(root--end+i,start,i-,*index+);
preOrder(root-,i+,end,*index+);
}
int main()
{
int N;
scanf("%d",&N);
post.resize(N);in.resize(N);
for(int i=;i<N;i++) scanf("%d",&post[i]);
for(int i=;i<N;i++) scanf("%d",&in[i]);
preOrder(N-,,N-,);
sort(ans.begin(),ans.end(),cmp);
for(int i=;i<N;i++)
if(i!=N-) printf("%d ",ans[i].val);
else printf("%d",ans[i].val);
system("pause");
return ;
}
PAT Advanced 1020 Tree Traversals (25 分)的更多相关文章
- PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习
1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive intege ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- PAT Advanced 1020 Tree Traversals (25) [⼆叉树的遍历,后序中序转层序]
题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...
- 【PAT】1020 Tree Traversals (25)(25 分)
1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...
- 【PAT甲级】1020 Tree Traversals (25 分)(树知二求一)
题意: 输入一个正整数N(N<=30),给出一棵二叉树的后序遍历和中序遍历,输出它的层次遍历. trick: 当30个点构成一条单链时,如代码开头处的数据,大约1e9左右的结点编号大小,故采用结 ...
- 【PAT】1020. Tree Traversals (25)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- 1020 Tree Traversals (25 分)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- 1020 Tree Traversals (25分)思路分析 + 满分代码
题目 Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder an ...
- PAT 甲级 1020 Tree Traversals (二叉树遍历)
1020. Tree Traversals (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppo ...
随机推荐
- [Tensorflow] 使用 tf.train.Checkpoint() 保存 / 加载 keras subclassed model
在 subclassed_model.py 中,通过对 tf.keras.Model 进行子类化,设计了两个自定义模型. import tensorflow as tf tf.enable_eager ...
- 【VS开发】fopen 文本文件与二进制文件区别
在学习C语言文件操作后,我们都会知道打开文件的函数是fopen,也知道它的第二个参数是 标志字符串.其中,如果字符串中出现'b',则表明是以打开二进制(binary)文件,否则是打开文本文件. 那么什 ...
- 实现base标签中有绝对路径
1.首先在jsp页面中写一段神奇的JAVA代码 <% String path = request.getContextPath(); String basePath = request.getS ...
- Information retrieval (IR class1)
1. 什么是IR? IR与数据库的区别? 答:数据库是检索结构化的数据,例如关系数据库:而信息检索是检索非结构化/半结构化的数据,例如:一系列的文本.信息检索是属于NLP(自然语言处理)里面最实用的一 ...
- Junk-Mail Filter 【并查集虚父节点】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2473 题目大意: n个点,m个操作,操作时,输入M a b,表示a, b在一个集合里, 输入S a 表 ...
- NameNode 和 SecondaryNameNode
1. NN 和 2NN 工作机制 NameNode 会产生在磁盘中备份元数据的FsImage; 每当元数据有更新或者添加数据时,修改内存中的元数据并追加到Edits中; SecondaryNameNo ...
- 《The C Programming Language》学习笔记
第五章:指针和数组 单目运算符的优先级均为2,且结合方向为自右向左. *ip++; // 将指针ip的值加1,然后获取指针ip所指向的数据的值 (*ip)++; // 将指针ip所指向的数据的值加1 ...
- [转帖]POWER ISA开源 浪潮商用机器加速POWER技术生态建设步伐
POWER ISA开源 浪潮商用机器加速POWER技术生态建设步伐 [原创] 2019-08-26 18:51:04 关键字: 开源 Power 浪潮商用机器 http://server.zhid ...
- 使用window.open 实现弹框和居中对齐
// 打开页面方法 window.open(url, '_blank', centerStyle('600', '400')+',toolbar=no,menubar=no,resizeable=no ...
- javaweb中关于转发与重定向的写法
转发: RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/main.jsp"); rd.forward(r ...