思考

一.什么遍历二叉树、线索二叉树、森林?(What)

0.二叉树遍历一共(4种)

1.二叉树先序遍历

2.二叉树中序遍历

3.二叉树后序遍历

4.遍历分析

5.遍历二叉树

6.二叉树层次遍历

7.二叉树遍历算法的应用

1.建立二叉树

2.复制二叉树

3.计算二叉树深度

4.树结点总数

5.叶子结点树

8.线索二叉树

9.树和森林

1.树、森林定义

2.树的存储结构

10.树和二叉树的转换

1.树的二叉链表

2.二叉树的二叉链表

3.树转化成二叉树

4.二叉树转成树

5.森林转化成二叉树

6.二叉树转化成森林

11.树和森林的遍历

1.树的遍历:一共3种

2.森林的遍历

二.为什么需要遍历二叉树、线索二叉树、森林?(Why)

三.如何学好遍历二叉树、线索二叉树、森林?(How)

1.学习遍历二叉树、线索二叉树、森林,需要具备以下几点:

2.下面是一些学习二叉树、线索二叉树、森林的具体方法:


数据结构很重要!

数据结构很重要!!!

数据结构很重要!!!!

思考

1.什么遍历二叉树、线索二叉树、森林?(What)

2.为什么需要遍历二叉树、线索二叉树、森林?(Why)

3.如何学好遍历二叉树、线索二叉树、森林?(How)

注:特别感谢青岛大学王卓老师

第5章 树和二叉树.pdf

一.什么遍历二叉树、线索二叉树、森林?(What)

0.二叉树遍历一共(4种)

  1. 先序遍历
  2. 中序遍历
  3. 后序遍历
  4. 层次遍历

1.二叉树先序遍历

2.二叉树中序遍历

3.二叉树后序遍历

4.遍历分析

5.遍历二叉树

6.二叉树层次遍历

第一个先入队,一旦出队,孩子节点立马进队。

7.二叉树遍历算法的应用

1.建立二叉树

目前画了一棵二叉树

注:空的结点用#表示

1.输入一个字符,如果为#,则T则指向空节点,然后返回OK(指针回到上一层)

2.否则,如果T空间没有分配成功,则报错。

3.生成根结点,T->data=ch

4.构造左子树 CreateBiTree(T->lchild)

5.构造右子树 CreateBiTree(T->rchild)

2.复制二叉树

1.如果是空树,递归结束

2.否则,申请新结点空间,复制根结点

  • 递归复制左子树
  • 递归复制右子树

3.计算二叉树深度

如果是空树,则深度为0;

否则,递归计算左子树的深度记为m,

递归计算右子树的深度记为n,

看m与n的较大者+1

4.树结点总数

如果是空树,则节点个数为0;

否则,结点个数为左子树的结点个数+右子树的结点个数+1

5.叶子结点树

如果是空树,则叶子结点个数为0

否则,为左子树的叶子结点个数+右子树大的叶子结点个数

核心:

1.如果左孩子和右孩子,都为空,则叶子结点返回1

8.线索二叉树

无法直接找到该结点,在某种遍历与列中的前驱和后继节点

解决办法:

1.通过遍历寻找——费时间

2.再增设前驱、后继指针域——增加了存储负担

3.利用二叉链表中的空指针域。

左孩子为空,将左孩子指针域改为指向其前驱(是指:线性排好后,元素的前驱)

根左右有孩子:0

根左右没有孩子:1

左空:前

又空:后

9.树和森林

1.树、森林定义

树:有且仅有一个特定的根,其余结点可以分为m个树。

森林:m棵互不相交的树的集合。

2.树的存储结构

1.双亲表示法

用数组存储:数据域+双亲域(上一结点存储位置)

data parent

0 R -1

1 A 0

1 B 2

r=0; //根结点位置

n=10; //结点个数

2.孩子链表

n个结点由n个孩子链表

叶子的孩子链表为空表

数组+链表

数组下标 数据 第一个孩子下的所有元素

0 A 3 5

1 B

2 C 6

孩子链表:找孩子容易

带双亲的链表,既能找孩子又能找双亲。

3.孩子兄弟表示法

找孩子容易,找兄弟容易

找双亲不容易。

每个结点的俩个指针域分别指向其第一个孩子节点下一个兄弟节点

4.总结:

1.双亲表示法

优点:找双亲容易

2.孩子链表

优点:找孩子容易

3.孩子兄弟表示法

找孩子和兄弟容易

10.树和二叉树的转换

1.树的二叉链表

2.二叉树的二叉链表

3.树转化成二叉树

每个结点指向他的 左孩子下一个兄弟节点

加线:兄弟之间加一连线

抹线:除左孩子外,抹掉其他孩子与父节点的连线

旋转:以树的根为轴心,将整树顺时针旋转45°

口诀:兄弟相连留长子

4.二叉树转成树

加线:若p节点是父节点的左孩子,将p的右孩子,右孩子的右孩子.....沿分支找到所有的右孩子,都与p的父节点连线起来。

抹线:去掉原来右孩线

调整:将节点按层次排列,形成树形结构

5.森林转化成二叉树

将各棵树分别转换成二叉树

将每棵树的根结点用线相连

以第一颗树根为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树。

6.二叉树转化成森林

去掉全部右孩线,孤立二叉再还原。

11.树和森林的遍历

二叉树:一共有4种遍历,最后一种是层次遍历。

1.树的遍历:一共3种

1.先根

2.后根

3.层次遍历

注:没有中根,树不知道放在中间哪个地方好。

2.森林的遍历

1.先序遍历

2.中序遍历

方法2:

也可以按照树的后根遍历,遍历每一棵树,即可得到结果。

二.为什么需要遍历二叉树、线索二叉树、森林?(Why)

1.需要遍历,实现功能:遍历二叉树、线索二叉树、森林是因为在对这些数据结构进行操作时,需要按照一定的顺序依次访问它们的节点,以实现特定的功能。

2.搜索、排序、输出:具体来说,遍历二叉树是指按照某种规定的顺序访问二叉树中的所有节点,包括先序遍历、中序遍历、后序遍历等。通过二叉树的遍历,可以对二叉树中的节点进行搜索、排序、输出等操作,这在数据处理和算法实现中非常常见。

3.线索二叉树提高查询效率:是在普通二叉树的基础上,增加了一些额外的信息,如前驱节点和后继节点,可以提高在二叉树上的查找效率。遍历线索二叉树可以按照线索信息的顺序依次访问节点,而不需要像遍历普通二叉树一样需要递归遍历。

4.森林是由多棵树组成的数据结构,遍历森林也需要按照一定的顺序访问其中的树和节点,可以通过前序遍历、中序遍历、后序遍历等方式进行。在对森林进行遍历时,可以处理多个树中的节点信息,实现一些复杂的操作,如树的合并、划分等。

总之,对于这些数据结构,遍历是一种非常基础和重要的操作,可以帮助我们实现各种各样的算法和数据处理任务

三.如何学好遍历二叉树、线索二叉树、森林?(How)

1.学习遍历二叉树、线索二叉树、森林,需要具备以下几点:

  1. 掌握二叉树的基本概念和性质
  2. 熟悉二叉树的存储结构,包括顺序存储和链式存储。
  3. 了解二叉树的遍历方式,包括先序遍历、中序遍历和后序遍历。
  4. 熟悉线索二叉树和森林的概念和基本性质
  5. 学会使用递归和非递归的方法进行二叉树的遍历和线索化
  6. 进行多种不同类型的练习,包括编写程序、手动模拟遍历过程等,加深理解。

2.下面是一些学习二叉树、线索二叉树、森林的具体方法:

  1. 通过课程或教材系统地学习二叉树、线索二叉树、森林的相关概念、算法和应用
  2. 练习手写二叉树的遍历和线索化算法,了解二叉树遍历的递归和非递归方法,加深理解
  3. 通过编写程序实现二叉树遍历和线索化算法,实践中不断提升算法能力
  4. 参考优秀的算法书籍或网站,学习其他高效的遍历和线索化算法,例如 Morris 遍历算法等。
  5. 进行多种不同类型的练习,包括手动模拟遍历过程、绘制二叉树的图形等,加深理解。
  6. 在学习过程中,多与其他人交流,包括教师、同学或社区中的其他人,分享经验和学习心得

8.遍历二叉树、线索二叉树、森林相关推荐

  1. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  2. (八)二叉树—线索二叉树

    一.基本介绍 二.应用实例 package tree;public class ThreadedBinaryTree {public static void main(String[] args) { ...

  3. 【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)

    一.二叉树的定义及其主要特征 1.1 二叉树的概念 二叉树是另一种树形结构,其特点是每个结点最多含两棵子树(也就是说,二叉树的度≤2). 二叉树是一种有序树,若将其左.右子树颠倒,则成为另一颗不同的二 ...

  4. 先序abdfcegh 中序bfdagehc 后序线索二叉树_二叉树的遍历和线索二叉树

    二叉树的遍历是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,且只被访问一次. 先序遍历(NLR) 若二叉树为空,则什么也不做:否则, (1)访问根结点. (2)先序遍历左子树. (3) ...

  5. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

    文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...

  6. 数据结构——前序线索二叉树及其前序遍历

    /************************ author's email:wardseptember@gmail.com date:2017.12.26 前序线索二叉树的前序遍历 ****** ...

  7. 数据结构入门----遍历二叉树和线索二叉树

    遍历二叉树(Traversing Binary Tree) 二叉树的遍历是指从根结点出发,按照某种次序访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 实际应用中,查找树中符合条件的结点 ...

  8. 【练习】2021下半年数据结构刷题笔记和总结 (二) 树、查找-- 不同的排序算法、二叉排序树 平衡二叉树、哈希表查找、线索二叉树、

    记录自己下半年写题目的记录.题目来自书或者网站. 练习(一)的地址: https://blog.csdn.net/qq_41358574/article/details/117098620?ops_r ...

  9. 深入学习二叉树(二) 线索二叉树

    深入学习二叉树(二) 线索二叉树 1 前言 在上一篇简单二叉树的学习中,初步介绍了二叉树的一些基础知识,本篇文章将重点介绍二叉树的一种变形--线索二叉树. 2 线索二叉树 2.1 产生背景 现有一棵结 ...

  10. 数据结构之线索二叉树

    线索二叉树 思维导图: 线索二叉数的引入: 线索二叉树: 前序遍历的线索二叉树: 中序遍历的线索二叉树(常): 后序遍历的线索二叉树: 线索二叉树的节点结构: 中序线索二叉树代码实现 中序线索二叉树的 ...

最新文章

  1. android 适配
  2. matplotlib plt.figure() 参数详细解释 对于绘制直方图 点图 的通用场景
  3. 5月22日阿里云网络变更公告
  4. 使用jpcap获取网卡硬件
  5. 窗口之间值、控件的传递
  6. input ios问题
  7. 点击Result list里product ID出现白屏的又一原因及分析
  8. screen 断开 screen -r 不能进入断开的会话
  9. js中执行到一个if就停止的代码_Node 中如何引入一个模块及其细节
  10. 1.8 编程基础之多维数组 09 矩阵乘法 6分 python
  11. 什么情况下不应该使用深度学习?
  12. 手动配置gradle
  13. echarts使用_做数据可视化,为什么我们不再直接使用D3.js、Echarts
  14. PyQT多线程串口 QtDesigner
  15. Java 类加载器详解
  16. 计算机组成原理中rr,计算机组成原理作业~第四章.doc
  17. 3060ti适配的cuda和cudnn
  18. HarmonyOS APP开发入门3——组件(二 Text组件)
  19. STM32f4系列ADC解析
  20. 人生感悟:影响人成功和幸福的21点

热门文章

  1. linux上使用ftdi的串口芯片,D2XX for Linux,出现ftdi d2xx与linux上的ftdi_sio冲突问题
  2. 金明的预算budget题解
  3. 北斗/GPS定位模块冷启动、热启动、温启动有什么区别?
  4. 如何通过Darkvm注册阿里云国际版?
  5. 虚拟机kali升级最新_虚拟机中安装kali 2020.3 史上最详细教程
  6. Python实现Excel办公自动化
  7. 计算机连接电视显示超范围,HDMI连接后电脑操作界面的边框超出电视屏幕,怎么解决...
  8. AIOps 在腾讯的探索和实践
  9. lululemon女性鞋履系列携AR试穿体验首发上线
  10. 动态拼图怎么做?如何将多张动图拼接在一起?