L2-011. 玩转二叉树
2016-06-05 13:01
423 查看
L2-011. 玩转二叉树
#include "iostream" #include "queue" #include "stdio.h" using namespace std; #define Max 51 int Pre[Max],Mid[Max],N; struct Node { int Data; Node *Left; Node *Right; Node () { Left=NULL; Right=NULL; } }; void CreatTree(int PreLeft,int MidLeft,int Len,Node *&p) { if(Len<=0) { return ; } p=new Node; p->Data=Pre[PreLeft]; int len,i=MidLeft; while(Pre[PreLeft]!=Mid[i]) i++; len=i-MidLeft; CreatTree(PreLeft+1,MidLeft,len,p->Left); CreatTree(PreLeft+len+1,i+1,Len-len-1,p->Right); } void Output(Node *p) { cout<<p->Data; queue<Node *> Q; if(p->Left!=NULL) { Q.push(p->Left); } if(p->Right!=NULL) { Q.push(p->Right); } while(!Q.empty()) { Node *s=Q.front(); Q.pop(); cout<<" "<<s->Data ; if(s->Left!=NULL) { Q.push(s->Left); } if(s->Right!=NULL) { Q.push(s->Right); } } } void Swap(Node *p ) { if(p==NULL) return; Swap(p->Left); Swap(p->Right); Node *s; s=p->Left; p->Left=p->Right; p->Right=s; } int main() { //freopen("1.txt","r",stdin); cin>>N; Node *Tree; Tree=NULL; int i,j; for(i=1;i<=N;i++) { cin>>Mid[i]; } for(j=1;j<=N;j++) { cin>>Pre[j]; } CreatTree(1,1,N,Tree); Swap(Tree); Output(Tree); cout<<endl; return 0; }
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7 1 2 3 4 5 6 7 4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2
相关文章推荐
- 国内大学毕业论文LaTeX模板集合
- 新的征程
- 一种快速毛玻璃虚化效果实现
- 【Linux】服务安装、启动、停止和卸载
- 程序设计第六次作业——计算器(可视化界面)
- 用Latex写IEEE论文
- 第十五周程序-阅读程序
- 学渣上手 LaTeX 完成毕业论文
- 软件工程-个人最终总结
- C++实验7--求两个数的最大公约数和最小公倍数
- 非极大值抑制(Non-maximum suppression)在物体检测领域的应用
- Android酷炫实用的开源框架(UI框架)
- 用 LaTeX 写漂亮学位论文
- 第十二周项目1(1)
- 1867 A + B for you again
- Android 中的UI
- 【一天一道LeetCode】#130. Surrounded Regions
- 【一天一道LeetCode】#130. Surrounded Regions
- 个人博客客户端——My CSDN 的实现(2)
- LaTeX快速入门-蔡炎龙