pat 1020. Tree Traversals (25)
2016-07-19 10:26
197 查看
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 (<=30), 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:
Sample Output:
已知二叉树后序和中序遍历,求层序遍历。
重建二叉树后,层序遍历就bfs二叉树就可以了。
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), 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
已知二叉树后序和中序遍历,求层序遍历。
重建二叉树后,层序遍历就bfs二叉树就可以了。
#include<iostream> using namespace std; #include<string.h> #include<stdio.h> #include<queue> #define MS(a,b) memset(a,b,sizeof(a)) typedef struct node { int data; node *left,*right; }*Tree; Tree T; int ans[100],in[100],post[100],n; void Build(int l1,int r1,int l2,int r2,Tree &T) { int i; T=new node(); for(i=l1;i<=r1;i++)//求根结点 if(in[i]==post[r2]) break; T->data=post[r2]; if(i==l1) T->left=NULL; else Build(l1,i-1,l2,l2+i-l1-1,T->left);//递归求左子树 if(i==r1) T->right=NULL; else Build(i+1,r1,r2-(r1-i),r2-1,T->right);//递归求右子树 } int j; void levelorder(Tree T) { queue<Tree>q; q.push(T); while(!q.empty()) { Tree root=q.front(); q.pop(); ans[j++]=root->data; if(root->left!=NULL) q.push(root->left); if(root->right!=NULL) q.push(root->right); } } int main() { /*#ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif*/ int i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&post[i]); for(i=1;i<=n;i++) scanf("%d",&in[i]); Build(1,n,1,n,T); j=0; levelorder(T); for(i=0;i<j-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[i]); return 0; }
相关文章推荐
- 对于cin和scanf效率的测试
- 禁用隐式动画
- Html,Css,Javascript及其他的注释方法详解
- 防止页面选中事件
- 【步兵 cocos2dx】texturePacker命令行
- 学习dubbo源代码
- 构造器创建对象
- 一些链接
- 指定服务标记为删除
- oracle 分析函数和开窗函数 ROW_NUMBER() OVER(PARTITION BY.....)
- HTML5 学习指导
- 如何在VB中使用API函数
- Spring注入方式实现AOP
- 9*9乘法
- 平时遇到的一些小问题
- leetcode:linked-list-cycle-ii
- 浅析malloc()的几种实现方式
- 寻找数组中第k小的数:平均情况下时间复杂度为O(n)的快速选择算法
- Datatable转换成List
- hdu 5434(状态压缩+矩阵优化)