L2-011 玩转二叉树(建树+BFS)
视频讲解
https://www.bilibili.com/video/BV1GS4y1a7Rv/
题目链接
https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784
思路
由于给出了中根遍历以及先根遍历,我们先通过先根遍历定位到树的根节点,然后再通过中根遍历划分二叉树,然后再不断地往左往右递归处理左右子树,最后建立完这颗二叉树后,我们再在BFS
的时候优先把右子树放入队列,这样就能达到镜像反转的层序遍历,详情请看代码
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3fconst int N = 1e2+10;int in[N],pre[N],n;struct Node{int l,r;
}Tree[N];int build(int l1,int r1,int l2,int r2){//l1-r1中序遍历,l2-r2先序遍历if(l1 > r1 || l2 > r2) return 0;int p = l1;while(in[p] != pre[l2]) p++;int len = p - l1;int rt = pre[l2];Tree[rt].l = build(l1,p-1,l2+1,l2 + len);Tree[rt].r = build(p+1,r1,l2+len+1,r2);return rt;
}void bfs(int s){queue<int> que;que.push(s);int cnt = 0;while(!que.empty()){int rt = que.front();que.pop();cout<<rt<<" \n"[++cnt==n];int l = Tree[rt].l,r = Tree[rt].r;if(r) que.push(r);if(l) que.push(l);}
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(int i = 1;i <= n; ++i) cin>>in[i];for(int i = 1;i <= n; ++i) cin>>pre[i];build(1,n,1,n);bfs(pre[1]);return 0;
}
L2-011 玩转二叉树(建树+BFS)相关推荐
- 【CCCC】L2-011 玩转二叉树 (25分),二叉树建树与遍历(我讨厌树,@L2-006)
problem L2-011 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设 ...
- PAT - L2-011. 玩转二叉树(分冶)
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
- 二叉查找(排序)树/二叉树----建树,遍历
二叉查找(排序)树/二叉树----建树,遍历 import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...
- C++数据结构——玩转二叉树
玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输 ...
- 7-11 玩转二叉树 (25 分)
7-11 玩转二叉树 (25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的 ...
- 【PTA】 7-3 玩转二叉树 (二叉树静态建树+左右子树交换+层次遍历)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...
- 爱之树(二叉树建树+搜索)
题目链接:题目详情 - 7-15 Tree of Love (pintia.cn) 样例1输入: 27 5 4 6 22 3 23 7 20 2 21 8 18 9 1 10 19 11 24 17 ...
- c语言bfs程序讲解,面试算法--二叉树DFS/BFS实现(C语言)
深度优先搜索算法(Depth First Search) DFS是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始 ...
- L2-011. 玩转二叉树
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...
最新文章
- matlab学习第一天
- OVS DPDK--virtqueue(十七)
- swapCursor vs changeCursor, what’s the difference?
- sdut 2087 离散事件模拟-银行管理
- html中按钮下拉菜单,CSS 下拉菜单
- 使用css3属性transition实现页面滚动
- PHP5时间相差八小时问题[三种方法]
- 15.Nginx 服务器的高级配置
- 华硕服务器主板安装系统提示驱动,华硕z590主板装win7系统及bios设置教程(支持11代cpu驱动)...
- LTE通信系统的网络拓扑结构(4G)
- LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
- Crazy Number
- 嗯,我是一个偏执狂。
- 卷积神经网络和图像分类识别
- 循环语句介绍(笔记学习)
- 最详细AMD Ryzen CPU,VMware 15安装macOS 10.15.x Catalina 记录(第一篇)
- PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe
- linux du命令 前多少个,Linux du命令查看文件夹大小并按降序排列
- oracle 00600 kccpb,ora-00600 [kccpb_sanity_check_2] 错误处理
- 技嘉 B360 HD3 Core i7-8700 GTX1060黑苹果efi引导文件
热门文章
- 折半查找的平均查找次数分析
- Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 ..
- 机器学习技法2-Dual Support Vector Machine
- ComponentPattern (组合模式)
- Linux系统下如何设置IP地址?
- ExtAspNet v3.1.9
- 【算法07】求子数组的最大和
- 技术检验检测管理系统之样品检验模块概况(四)
- c语言中int型变量的字节数
- 图解再谈ssh port forwarding-ssh隧道技术