PAT 1020. Tree Traversals
来源:互联网 发布:电脑版淘宝客服打不开 编辑:程序博客网 时间:2024/05/17 18:44
题目:http://pat.zju.edu.cn/contests/pat-a-practise/1020
题解:
题意就是给一个二叉树的后序和中序,然后确定这棵二叉树,然后层序输出这棵树。
主要思路就是通过后序去确定根root,因为后序中根root肯定是在最后一个的,然后通过找到的根root去把中序的划分成两部分,左边的是根root的左子树,右边的是根root的右子树,再递归左子树和右子树。最终确定二叉树的逻辑结构。
代码:
#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<string>#include<vector>#include<queue>#include<algorithm>using namespace std;struct point{ int left,right;}num[35];queue<int> q;vector<int> ans;int buildTree(int a[],int b[],int n){ if(n<=0) return -1; int root=a[n-1]; num[root].left=-1; num[root].right=-1; int i; for(i=0;i<n;++i) if(b[i]==a[n-1]) break; num[root].left=buildTree(a,b,i); num[root].right=buildTree(a+i,b+i+1,n-i-1); return root;}void levelTree(int idx){ int temp; q.push(idx); for(;!q.empty();) { temp=q.front(); q.pop(); if(num[temp].left!=-1) q.push(num[temp].left); if(num[temp].right!=-1) q.push(num[temp].right); ans.push_back(temp); }}int main(){ int n; int a[35],b[35]; scanf("%d",&n); for(int i=0;i<n;++i) scanf("%d",a+i); for(int i=0;i<n;++i) scanf("%d",b+i); int root=buildTree(a,b,n); levelTree(root); printf("%d",ans[0]); for(int i=1;i<ans.size();++i) printf(" %d",ans[i]); printf("\n"); return 0;}
来源:http://blog.csdn.net/acm_ted/article/details/19937535
0 0
- 【PAT】1020. Tree Traversals
- PAT 1020. Tree Traversals
- PAT 1020. Tree Traversals
- PAT--1020. Tree Traversals
- PAT 1020. Tree Traversals
- PAT 1020. Tree Traversals
- 【PAT】1020. Tree Traversals
- pat 1020. Tree Traversals (25)
- 【PAT】1020. Tree Traversals (25)
- PAT: 1020. Tree Traversals (25)
- PAT 1020. Tree Traversals(25)
- 【PAT】1020. Tree Traversals (25)
- [PAT]1020. Tree Traversals (25)
- PAT 1020. Tree Traversals (25)
- PAT 1020. Tree Traversals (25)
- pat 1020. Tree Traversals (25)
- PAT 1020. Tree Traversals (25)
- pat 1020. Tree Traversals (25)
- C++学习之运算符重载的总结
- 移动开发者必须了解的10大跨平台工具
- Linux 线程实现机制分析
- 处理菜单和导航对象
- OJ_1133
- PAT 1020. Tree Traversals
- 值得一听,改变人生的21个演讲
- OJ_1134
- adroid 手机访问本机Tomcat服务器
- Deleting Sequence(LIS)
- 使用JavaScript实现客户端与服务器验证
- 从端口层面对比下openflow和传统交换机
- KVC 与 KVO 理解
- 非阻塞IO 和阻塞IO