树的遍历 (和) 玩转二叉树 的总结博客
树的遍历:
关键在与如何利用中序和后序建树。
中序的作用,提供了左右子树的所有节点的分布!
前序,后序的作用:就是第一个元素(最后一个元素)提供了根节点,让中序找到子树的分布情况。
#include<iostream> #include<queue> #include<vector> using namespace std; const int maxn = 100; int af[maxn], in[maxn], n; struct node{int l, r; }tree[maxn];int biuld(int al, int ar, int bl, int br){if (al > ar)return 0;int root, p1, len;root = af[br];for (p1 = al; p1 <= ar; ++p1)if (in[p1] == root)break;len = p1 - al;tree[root].l = biuld(al, p1 - 1, bl, bl + len-1);tree[root].r = biuld(p1 + 1, ar, bl + len, br - 1);return root; }void BFS(int x){queue<int>q;vector<int>v;q.push(x);while (!q.empty()){int root = q.front(); q.pop();if (root == 0)break;v.push_back(root);if (tree[root].l)q.push(tree[root].l);if (tree[root].r)q.push(tree[root].r);}int len = v.size();for (int i = 0; i < len; ++i)cout << v[i] << " \n"[i == len - 1]; }int main(){cin >> n;for (int i = 0; i < n; ++i)cin >> af[i];for (int i = 0; i < n; ++i)cin >> in[i];int root = biuld(0, n - 1, 0, n - 1);BFS(root); }
玩转二叉树:
这里的改变只是在建树的时候,把原本左子树放在实际的右子树上,原本的右子树放在左子树上。
#include<iostream> #include<queue> #include<vector> using namespace std; const int maxn = 1e3; struct node{int l, r; }tree[maxn]; int pre[maxn], in[maxn], n;int build(int al, int ar, int bl, int br){if (al > ar)return 0;int root, p1, len;root = pre[bl];for (p1 = al; p1 <= ar; ++p1)if (in[p1] == root)break;len = p1 - al;tree[root].r = build(al, p1 - 1, bl + 1, bl + len );tree[root].l = build(p1 + 1, ar, bl + len + 1, br);return root; }void BFS(int x){queue<int>q; vector<int>v;q.push(x);while (!q.empty()){int root = q.front(); q.pop();if (root == 0)break;v.push_back(root);if (tree[root].l)q.push(tree[root].l);if (tree[root].r)q.push(tree[root].r);}int size = v.size();for (int i = 0; i < size; ++i)cout << v[i] << " \n"[i == size - 1]; }int main(){cin >> n;for (int i = 0; i < n; ++i)cin >> in[i];for (int i = 0; i < n; ++i)cin >> pre[i];int root = build(0, n - 1, 0, n - 1);BFS(root);}
转载于:https://www.cnblogs.com/ALINGMAOMAO/p/10581348.html
树的遍历 (和) 玩转二叉树 的总结博客相关推荐
- 【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客
最近发现了Domoticz平台,配合ESPEasy固件,玩起来也是挺有意思,这里贴一些资源,以后玩起来再更新博客吧. 1.在树莓派系统中安装dromoticz步骤 2.开源IoT平台domoticz与 ...
- 玩转html5画图 - TimeLangoliers - 博客园
导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制 ...
- L2-006. 树的遍历(不建树)
L2-006. 树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个 ...
- 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机!
怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 转载于:htt ...
- 【CCCC】L2-011 玩转二叉树 (25分),二叉树建树与遍历(我讨厌树,@L2-006)
problem L2-011 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设 ...
- PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...
L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...
- 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构
本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...
- 【每日一题】Leetcode 刷题 二叉树-树的遍历 介绍
二叉树-树的遍历 前序遍历 (根 左 右) 中序遍历 (左 根 右) 后序遍历 (左 右 根) 代码实现 前序遍历 中序遍历 后序遍历 完整代码 前序遍历 (根 左 右) 遍历顺序分别为: F B A ...
- 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)
problem L2-006 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30), ...
- LeetCode 2331. 计算布尔二叉树的值(树的遍历)
文章目录 1. 题目 2. 解题 1. 题目 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True . 非叶子节点 ...
最新文章
- excel单元格加引号及逗号,转换为sql需要的样式
- 密码学系列之:明文攻击和Bletchley Park
- Flask的session使用
- mysql 查询语句属性值_MySQL学习——SQL查询语句(一)
- LeetCode-652. 寻找重复的子树
- linux多线程学习(二)——线程的创建和退出
- python 传参数 传引用_Python 函数参数 传引用还是传值
- Redis 性能问题排查:slowlog 和排队延时
- 【浙江大学PAT真题练习乙级】1005 继续(3n+1)猜想 (25分) 真题解析
- arcgis将一个shp图层导出为多个shp
- (7)机器学习之make_bolbs
- opencv提供的带参数例程
- html视频怎么自动播放一次,HTML5视频自动播放/播放一次
- ButterKnife被弃用,ViewBinding才是findView的未来?
- Flutter流畅性fps计算
- u盾如何在计算机上使用方法,u盾在电脑中具体使用操作过程
- openwrt校园网自动登录且断网重连
- C语言入门递归算法——汉诺塔(简单易懂,最后还有汉诺塔游戏)
- 最强计算机游戏,这可能是市面上体积最小性能最强的游戏主机了
- 同为标准版 OPPO Reno7和华为nova9怎么选,这几点要搞清楚
热门文章
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_4_IP地址...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_1_序列化和反序列化的概述...
- python read文件的r和rb的区别
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。报错...
- Python控制语句执行流程
- Sublime Text 2安装图解
- HTML5-坦克大战一画出敌人坦克并让自己的坦克可以发子弹的功能(二)
- Android之编写测试用例
- 【debian】解决debian中文安装后出现乱码的问题
- Hadoop2.0安装