视频讲解

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)相关推荐

  1. 【CCCC】L2-011 玩转二叉树 (25分),二叉树建树与遍历(我讨厌树,@L2-006)

    problem L2-011 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设 ...

  2. PAT - L2-011. 玩转二叉树(分冶)

    L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...

  3. 二叉查找(排序)树/二叉树----建树,遍历

    二叉查找(排序)树/二叉树----建树,遍历 import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...

  4. C++数据结构——玩转二叉树

    玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输 ...

  5. 7-11 玩转二叉树 (25 分)

    7-11 玩转二叉树 (25 分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的 ...

  6. 【PTA】 7-3 玩转二叉树 (二叉树静态建树+左右子树交换+层次遍历)

    给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...

  7. 爱之树(二叉树建树+搜索)

    题目链接:题目详情 - 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 ...

  8. c语言bfs程序讲解,面试算法--二叉树DFS/BFS实现(C语言)

    深度优先搜索算法(Depth First Search) DFS是搜索算法的一种.它沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始 ...

  9. L2-011. 玩转二叉树

    给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...

最新文章

  1. matlab学习第一天
  2. OVS DPDK--virtqueue(十七)
  3. swapCursor vs changeCursor, what’s the difference?
  4. sdut 2087 离散事件模拟-银行管理
  5. html中按钮下拉菜单,CSS 下拉菜单
  6. 使用css3属性transition实现页面滚动
  7. PHP5时间相差八小时问题[三种方法]
  8. 15.Nginx 服务器的高级配置
  9. 华硕服务器主板安装系统提示驱动,华硕z590主板装win7系统及bios设置教程(支持11代cpu驱动)...
  10. LTE通信系统的网络拓扑结构(4G)
  11. LaTeX错误“Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf.”
  12. Crazy Number
  13. 嗯,我是一个偏执狂。
  14. 卷积神经网络和图像分类识别
  15. 循环语句介绍(笔记学习)
  16. 最详细AMD Ryzen CPU,VMware 15安装macOS 10.15.x Catalina 记录(第一篇)
  17. PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe
  18. linux du命令 前多少个,Linux du命令查看文件夹大小并按降序排列
  19. oracle 00600 kccpb,ora-00600 [kccpb_sanity_check_2] 错误处理
  20. 技嘉 B360 HD3 Core i7-8700 GTX1060黑苹果efi引导文件

热门文章

  1. 折半查找的平均查找次数分析
  2. Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 ..
  3. 机器学习技法2-Dual Support Vector Machine
  4. ComponentPattern (组合模式)
  5. Linux系统下如何设置IP地址?
  6. ExtAspNet v3.1.9
  7. 【算法07】求子数组的最大和
  8. 技术检验检测管理系统之样品检验模块概况(四)
  9. c语言中int型变量的字节数
  10. 图解再谈ssh port forwarding-ssh隧道技术