PATL2-006. 树的遍历
来源:互联网 发布:ubuntu 麒麟wineqq 编辑:程序博客网 时间:2024/04/28 07:19
用的是递归的思想,找到每一层的根节点,然后进行建树。最后用个bfs将这个树输出
AC代码:
/* ***********************************************Author :yzkAcceptedCreated Time :2016/7/11 20:28:05TASK :ggfly.cppLANG :C++************************************************ */#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>#include <stack>using namespace std;const int maxn=50;int mid[maxn],be[maxn];struct node{int l,r;}a[maxn];int build(int la,int ra,int lb,int rb)//la,ra表示中序遍历 lb,rb表示后序遍历{if(la>ra)return 0;int rt=be[rb],p1,p2;p1=la;while(mid[p1]!=rt)p1++;//在中序遍历中找到根节点p2=p1-la;a[rt].l=build(la,p1-1,lb,lb+p2-1);a[rt].r=build(p1+1,ra,lb+p2,rb-1);return rt;}void bfs(int x)//层序遍历{queue<int>q;vector<int>v;q.push(x);while(!q.empty()){int w=q.front();q.pop();if(w==0)break;v.push_back(w);if(a[w].l!=0)q.push(a[w].l);if(a[w].r!=0)q.push(a[w].r);}int len=v.size();for(int i=0;i<len;i++)printf("%d%c",v[i],i==len-1?'\n':' ');return;}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout);int n,i,j;cin>>n;for(i=0;i<n;i++) scanf("%d",&be[i]);for(i=0;i<n;i++) scanf("%d",&mid[i]);build(0,n-1,0,n-1);int root=be[n-1];bfs(root); return 0;}
1 1
- PATL2-006. 树的遍历
- PATL2-006.树的遍历
- PATL2-004. 这是二叉搜索树吗?
- PATL2-002. 链表去重(模拟)
- patL2-007 家庭房产
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- L2-006. 树的遍历
- 2-006. 树的遍历
- L2-006. 树的遍历
- PHP的压力测试工具ab.exe 和mpm介绍提高并发数
- 让Openwrt 默认开启wifi
- conv2函数(MATLAB)
- Service服务
- C++的重写,重载与充定义
- PATL2-006. 树的遍历
- tableviewcell 被选中时,label的背景色改变
- POJ 3264 Balanced Lineup 线段树基础
- 利用ajax无刷新验证注册信息
- 深度学习(四十)caffe使用点滴记录
- PAT甲级1001. A+B Format(20)
- 算法之 排序算法 (三) Java
- 单循环链表中设置尾指针比设置头指针更好的原因
- Retrofit2结合Picasso在项目当中的简单使用