5-11 玩转二叉树 (数据结构)
来源:互联网 发布:淘宝充值比官方便宜 编辑:程序博客网 时间:2024/06/03 22:05
5-11 玩转二叉树 (25分)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。
输入格式:
输入第一行给出一个正整数N(\le≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。
输出格式:
在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。
输入样例:
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
输出样例:
4 6 1 7 5 3 2
根据先序与中序遍历求出二叉树,然后用bfs遍历求按层遍历的结果
#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>using namespace std;#define M 10010int mid[M], fir[M];struct node{ int l, r;};node a[M];int build(int la, int ra, int lb, int rb)//建立二叉树{ if(la > ra) { return 0; } int p1, p2, rt; p1 = la; rt = fir[lb];//先序遍历的第一个点事根 while(mid[p1] != rt) { p1++;//找出左子树的范围 } p2 = p1 - la;//记录一个子树的范围 a[rt].l = build(la, p1-1, lb+1, lb+p2);//左子树 a[rt].r = build(p1+1, ra, lb+p2+1, rb);//右子树 return rt;//返回根节点}void bfs(int rt){ queue<int> q; q.push(rt); vector<int> vec; while(!q.empty()) { int x = q.front(); q.pop(); if(x == 0) { continue; } vec.push_back(x); if(a[x].r != 0)//交叉变换所以先遍历右子树 { q.push(a[x].r); } if(a[x].l != 0) { q.push(a[x].l); } } int len = vec.size(); for(int i=0; i<len; i++) { printf("%d%c", vec[i], i==len-1 ? '\n' : ' '); }}int main(){ int n; scanf("%d", &n); for(int i=0; i<n; i++) { scanf("%d", &mid[i]); } for(int i=0; i<n; i++) { scanf("%d", &fir[i]); } int root = fir[0]; build(0, n-1, 0, n-1); bfs(root); return 0;}
0 0
- 5-11 玩转二叉树 (数据结构)
- 天梯赛 L2-011. 玩转二叉树(数据结构)
- 天梯赛 L2-011 玩转二叉树 数据结构
- 玩转二叉树
- 玩转二叉树
- 玩转二叉树
- PAT L2-011.玩转二叉树(数据结构,二叉链表)
- CCCC练习 5-11玩转二叉树
- 【PTA 5-11 玩转二叉树 (25分)】+ 二叉树
- pat-玩转二叉树
- PTA-玩转二叉树
- 数据结构(二叉树)
- 数据结构(二叉树)
- PTA 5-11 玩转二叉树 (25分)【已知中序和前序求树】
- L2-011. 玩转二叉树
- L2-011. 玩转二叉树
- L2-011. 玩转二叉树
- PAT L2-011. 玩转二叉树
- 支持向量机(Support Vector Machine, SVM)
- 作业1.452:删除链表中的元素
- windows使用VNC远程访问Ubuntu 14.04图形界面
- HTML中label标签
- java的cmd运行方式
- 5-11 玩转二叉树 (数据结构)
- 3Sum
- bzoj1216 [HNOI2003]操作系统
- 目标跟踪算法--Staple: Complementary Learners for Real-Time Tracking
- Prefixes and Suffixes
- JAVA jdbc ResultSet 通过反射机制转换为实体类Bean
- linux进程间通信的几种机制的比较及适用场合
- 双子树(BSOI1105)
- Runtime系列(Method Swizzzling)