树的遍历:

关键在与如何利用中序和后序建树。

  中序的作用,提供了左右子树的所有节点的分布!

  

  前序,后序的作用:就是第一个元素(最后一个元素)提供了根节点,让中序找到子树的分布情况。

#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

树的遍历 (和) 玩转二叉树 的总结博客相关推荐

  1. 【Domoticz】玩转Domoticz平台——配合ESPEasy固件,开个头,以后玩起来起来再更新博客

    最近发现了Domoticz平台,配合ESPEasy固件,玩起来也是挺有意思,这里贴一些资源,以后玩起来再更新博客吧. 1.在树莓派系统中安装dromoticz步骤 2.开源IoT平台domoticz与 ...

  2. 玩转html5画图 - TimeLangoliers - 博客园

    导航 前言 基本知识 绘制矩形 清除矩形区域 圆弧 路径 绘制线段 绘制贝塞尔曲线 线性渐变 径向渐变(发散) 图形变形(平移.旋转.缩放) 矩阵变换(图形变形的机制) 图形组合 给图形绘制阴影 绘制 ...

  3. L2-006. 树的遍历(不建树)

    L2-006. 树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个 ...

  4. 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机!

    怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机! 转载于:htt ...

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

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

  6. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...

    L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...

  7. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  8. 【每日一题】Leetcode 刷题 二叉树-树的遍历 介绍

    二叉树-树的遍历 前序遍历 (根 左 右) 中序遍历 (左 根 右) 后序遍历 (左 右 根) 代码实现 前序遍历 中序遍历 后序遍历 完整代码 前序遍历 (根 左 右) 遍历顺序分别为: F B A ...

  9. 【CCCC】L2-006 树的遍历 (25分),根据后序与中序遍历建立二叉树(我讨厌树,系列1)

    problem L2-006 树的遍历 (25分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30), ...

  10. LeetCode 2331. 计算布尔二叉树的值(树的遍历)

    文章目录 1. 题目 2. 解题 1. 题目 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True . 非叶子节点 ...

最新文章

  1. excel单元格加引号及逗号,转换为sql需要的样式
  2. 密码学系列之:明文攻击和Bletchley Park
  3. Flask的session使用
  4. mysql 查询语句属性值_MySQL学习——SQL查询语句(一)
  5. LeetCode-652. 寻找重复的子树
  6. linux多线程学习(二)——线程的创建和退出
  7. python 传参数 传引用_Python 函数参数 传引用还是传值
  8. Redis 性能问题排查:slowlog 和排队延时
  9. 【浙江大学PAT真题练习乙级】1005 继续(3n+1)猜想 (25分) 真题解析
  10. arcgis将一个shp图层导出为多个shp
  11. (7)机器学习之make_bolbs
  12. opencv提供的带参数例程
  13. html视频怎么自动播放一次,HTML5视频自动播放/播放一次
  14. ButterKnife被弃用,ViewBinding才是findView的未来?
  15. Flutter流畅性fps计算
  16. u盾如何在计算机上使用方法,u盾在电脑中具体使用操作过程
  17. openwrt校园网自动登录且断网重连
  18. C语言入门递归算法——汉诺塔(简单易懂,最后还有汉诺塔游戏)
  19. 最强计算机游戏,这可能是市面上体积最小性能最强的游戏主机了
  20. 同为标准版 OPPO Reno7和华为nova9怎么选,这几点要搞清楚

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第1节 网络通信概述_4_IP地址...
  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_1_序列化和反序列化的概述...
  3. python read文件的r和rb的区别
  4. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。报错...
  5. Python控制语句执行流程
  6. Sublime Text 2安装图解
  7. HTML5-坦克大战一画出敌人坦克并让自己的坦克可以发子弹的功能(二)
  8. Android之编写测试用例
  9. 【debian】解决debian中文安装后出现乱码的问题
  10. Hadoop2.0安装