1020. Tree Traversals (25)
2016-02-01 16:53
423 查看
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:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
Sample Output:
4 1 6 3 5 7 2
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
做树的题目,要考虑要不要建树。像层次遍历输出,如果是完全二叉树,则不需要,而类似本题则需要。
#include<iostream> #include<queue> using namespace std; int post[55],in[55]; typedef struct node{ int date; node *left; node *right; node(){ left=NULL;right=NULL; } }*tree; tree getlevel(int inl,int inr,int postl,int postr) { if(postl>postr) return NULL; tree t =new node; t->date=post[postr]; int k; for(k=inl;k<=inr;k++){ if(in[k]==post[postr]) break; } int numleft=k-inl; t->left=getlevel(inl,k-1,postl,postl+numleft-1); t->right=getlevel(k+1,inr,postl+numleft,postr-1); return t; } int main(){ int n,i; freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) cin>>post[i]; for(i=0;i<n;i++) cin>>in[i]; int inl=0,postl=0,inr=n-1,postr=n-1; tree t=getlevel(inl,inr,postl,postr); queue <tree> tq; tree temp; printf("%d",t->date); tq.push(t); while(!tq.empty()) { temp=tq.front(); tq.pop(); if(temp->left!=NULL){ printf(" %d",temp->left->date); tq.push(temp->left); } if(temp->right!=NULL){ printf(" %d",temp->right->date); tq.push(temp->right); } } } return 0; }
相关文章推荐
- 五分钟初识Hadoop
- count++不是原子性操作测试
- day05 _未完待续
- XML特殊字符转义
- iOS每日一记————————CoreText初识
- C#委托,事件,接口,反射和关键字
- new 运算符
- 设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数
- centos7下安装fastdfs
- 三种获取打气筒常用的API
- 安卓onkeyup onkeydown事件小记
- phpcms加载系统类与加载应用类之区别详解
- Mac利用PD虚拟机安装Centos7
- Struts2--标签
- ScrollView滚动到指定位置
- CSS浏览器兼容性常见问题总结
- 2015年终总结,细细的数曾经走过的路
- Android原生下拉刷新SwipeRefreshLayout
- ajax post中文乱码问题
- 她是张作霖钦定的儿媳 但张学良最终没选择她