《数据结构》天勤和王道 第五章 树

  • 天勤部分
    • 1. 树的基础知识
      • 1.1 结点的度
      • 1.2 树的度
      • 1.3 叶子结点
      • 1.4 双亲结点、孩子结点、祖先结点和子孙结点
      • 1.5 兄弟结点和堂兄弟结点
      • 1.6 高度和深度
      • 1.7 存储结构
    • 2. 二叉树的逻辑结构和存储结构
      • 2.1 性质
      • 2.2 叶子结点数=双分支结点数+1的灵活运用
      • 2.3 m叉树的性质
  • 王道部分
    • 1. 树的定义和基本术语
    • 2. 树的常考性质
    • 3. 二叉树的定义和基本术语
      • 3.1 满二叉树和完全二叉树
      • 3.2 二叉排序树
      • 3.3 平衡二叉树
    • 4. 二叉树的性质
      • 4.1 二叉树的常考性质
      • 4.2 完全二叉树的常考性质
    • 5. 二叉树的存储结构
      • 5.1 顺序存储
      • 5.2 链式存储
    • 6. 二叉树的先中后序遍历
      • 6.1 先序遍历的代码
      • 6.2 中序遍历的代码
      • 6.3 后序遍历的代码
      • 6.4 遍历算术表达式树
    • 7. 二叉树的层序遍历
    • 8. 由遍历序列构造二叉树
      • 8.1 不同二叉树的遍历序列
      • 8.2 前序+中序遍历序列
      • 8.3 后序+中序遍历序列
      • 8.4 层序+中序遍历
    • 9. 线索二叉树
      • 9.1 线索二叉树的概念
        • 9.1.1 中序线索二叉树
          • 线索二叉树的存储结构
        • 9.1.2 先序线索二叉树
        • 9.1.3 后序线索二叉树
      • 9.2 二叉树的线索化(代码实现)
        • 9.2.1 中序线索化
        • 9.2.2 先序线索化
        • 9.2.3 后序线索化
      • 9.3 线索二叉树找前驱/后继
        • 9.3.1 中序线索二叉树找中序后继
        • 9.3.2 中序线索二叉树找中序前驱
        • 9.3.3 先序线索二叉树找先序后继
        • 9.3.4 先序线索二叉树找先序前驱
        • 9.3.5 后序线索二叉树找后序前驱
        • 9.3.6 后序线索二叉树找后序后继
    • 10. 树的存储结构
      • 10.1 双亲表示法(顺序存储)
      • 10.2 孩子表示法(顺序+链式存储)
      • 10.3 孩子兄弟表示法(链式存储)
      • 10.4 森林和二叉树的转换
    • 11 树、森林的遍历
      • 11.1 树的先根遍历
      • 11.2 树的后根遍历
      • 11.3 树的层次遍历
      • 11.4 森林的先序遍历
      • 11.5 森林的中序遍历
    • 12. 哈夫曼树
      • 12.1 带权路径
      • 12.2 哈夫曼树的定义
      • 12.3 哈夫曼树的构造
      • 12.4 哈夫曼编码
    • 13. 并查集(新增考点)
      • 13.1 查和并的实现
      • 13.2 并查集的存储结构
      • 13.3 基本操作
      • 13.4 代码实现
      • 13.5 Union操作的优化
      • 13.6 Find操作的优化(压缩路径)

天勤部分

1. 树的基础知识


树是一种递归定义的数据结构。递归特性:当前每一层都跟上一层有类似的结构,每一个子结构跟其父结构都类似。

1.1 结点的度

1.2 树的度


所有结点中最大的分支数就是树的度。

1.3 叶子结点


度为0的结点就是叶子结点。

1.4 双亲结点、孩子结点、祖先结点和子孙结点



1.5 兄弟结点和堂兄弟结点


1.6 高度和深度

1.7 存储结构

这部分直接看下面王道的“10. 树的存储结构”。

2. 二叉树的逻辑结构和存储结构


2.1 性质


2.2 叶子结点数=双分支结点数+1的灵活运用


当求一棵树中的空指针个数等时,我们可以先在每个结点上填充上空指针,使得每个结点的度都为2,然后就可以运用公式了。

2.3 m叉树的性质


王道部分

1. 树的定义和基本术语





2. 树的常考性质







3. 二叉树的定义和基本术语


3.1 满二叉树和完全二叉树

满二叉树是一种特殊的完全二叉树。

3.2 二叉排序树

3.3 平衡二叉树


4. 二叉树的性质

4.1 二叉树的常考性质


结点树=总度数+1;这的“1”表示的是根结点。

4.2 完全二叉树的常考性质


这里的 h-1<log2 (n+1)<=h,表示的是log2 (n+1)在 h-1 和 h 之间相差不到一的小数,由于是<=h,所以向上取整。

5. 二叉树的存储结构

5.1 顺序存储





5.2 链式存储



6. 二叉树的先中后序遍历





6.1 先序遍历的代码





6.2 中序遍历的代码


6.3 后序遍历的代码


6.4 遍历算术表达式树



7. 二叉树的层序遍历


8. 由遍历序列构造二叉树

8.1 不同二叉树的遍历序列





8.2 前序+中序遍历序列


举个例子:




8.3 后序+中序遍历序列


举个例子:





8.4 层序+中序遍历


举个例子:




再举个例子:





必须跟中序序列组合才能确定唯一的二叉树。

9. 线索二叉树

9.1 线索二叉树的概念

遍历二叉树是以一定的规则讲二叉树中的结点排列成一个线性序列,从而得到几种遍历序列,使得该序列中的每个结点(第一个和最后一个结点除外)都有一个直接前驱和直接后继。
这种是没有线索的时候,找遍历序列中的前驱和后继。

通过中序遍历,先访问D结点(visit(D)),然后继续执行下去。

9.1.1 中序线索二叉树

线索二叉树的存储结构


9.1.2 先序线索二叉树


9.1.3 后序线索二叉树




9.2 二叉树的线索化(代码实现)

9.2.1 中序线索化



9.2.2 先序线索化




9.2.3 后序线索化



9.3 线索二叉树找前驱/后继

9.3.1 中序线索二叉树找中序后继


9.3.2 中序线索二叉树找中序前驱


9.3.3 先序线索二叉树找先序后继

9.3.4 先序线索二叉树找先序前驱


9.3.5 后序线索二叉树找后序前驱

9.3.6 后序线索二叉树找后序后继



10. 树的存储结构

10.1 双亲表示法(顺序存储)






10.2 孩子表示法(顺序+链式存储)


10.3 孩子兄弟表示法(链式存储)



10.4 森林和二叉树的转换



11 树、森林的遍历

11.1 树的先根遍历

11.2 树的后根遍历

11.3 树的层次遍历

11.4 森林的先序遍历


11.5 森林的中序遍历



如果考试要是考到关于遍历森林的代码的话,我们可以先转换成上述这种二叉树(即森林用二叉树来存储),然后利用我们熟悉的二叉树代码继续解决。

12. 哈夫曼树

12.1 带权路径

12.2 哈夫曼树的定义


只要是最优二叉树就是哈夫曼树。

12.3 哈夫曼树的构造


12.4 哈夫曼编码





13. 并查集(新增考点)

并查集的逻辑结构是一个集合。




这个时候我们可以将集合之间的关系类似地看成是森林,而每个集合中的元素也可以组成一棵树。

13.1 查和并的实现


13.2 并查集的存储结构

可以用双亲表示法来存储并查集。

13.3 基本操作

13.4 代码实现



13.5 Union操作的优化

优化思路:在每次Union操作构建树的时候,尽量不要让树“长高”。
①用根结点的绝对值表示树的结点总数。
②Union操作,让小树合并到大树。


13.6 Find操作的优化(压缩路径)







每次Union时,都需要从指定元素出发找到该元素的根结点,也就是需要乘上Find函数的时间复杂度。

《数据结构》天勤和王道 第五章 树相关推荐

  1. C语言数据结构【手抄版】第五章 树和二叉树【上篇】

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 5.1.树的基本概念和术语 1.树的定义 2.树的表示法 3.基本术 ...

  2. C语言数据结构【手抄版】第五章 树和二叉树【尾篇】二叉树C实现

    封装二叉树算法 字符串工具,规避了了数字类型字符串比较不准确的BUG,string.h: #pragma once #ifdef __cplusplus extern "C" { ...

  3. 《数据结构》天勤和王道 第四章 串

    <数据结构>天勤和王道 第四章 串 天勤部分 1. 串的基础 1.1 逻辑结构 1.2 存储结构 1.3 赋值操作 1.4 串比较 1.5 串连接 1.6 求子串 1.7 清空串 2. K ...

  4. 【数据结构总结】第五章 树和二叉树(非线性结构)

    第五章 树和二叉树(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和 ...

  5. 数据结构(C语言)第二版 第五章课后答案

    数据结构(C语言)第二版 第五章课后答案 1~5 A D D C A 6~10 C C B D C 11~15 B C A C A 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(A) ...

  6. 第五章 树16 AcWing 1628. 判断红黑树

    第五章 树16 AcWing 1628. 判断红黑树 原题链接 AcWing 1628. 判断红黑树 算法标签 平衡树 思路 代码 #pragma GCC optimize(2) #pragma GC ...

  7. 【Java数据结构与算法】第十五章 B树、B+树和B*树

    第十五章 B树.B+树和B*树 文章目录 第十五章 B树.B+树和B*树 一.B树 1.引入 2.介绍 二.B+树 1.引入 2.介绍 三.B*树 1.介绍 一.B树 1.引入 为什么数据库索引要使用 ...

  8. 数据结构(C语言第2版) 课后习题答案之第五章 树和二叉树

    目录 第5章  树和二叉树 一.选择题 二.应用题 (1)试找出满足下列条件的二叉树 (2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C (3 ...

  9. 408数据结构考研笔记——第五章树与二叉树(重点)

    目录 一.基本概念 1.定义 2.基本术语 3.性质(重点!!) 二.二叉树 1.定义 2.特殊二叉树 1.满二叉树 2.完全二叉树 3.二叉排序树 4.平衡二叉树 3.性质 4.存储结构 1.顺序存 ...

  10. (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序)

    文章目录 一:二叉树遍历概述 二:二叉树深度优先遍历 (1)先序遍历-根左右(NLR) (2)中序遍历-左根右(LNR) (3)后序遍历-左右根(LRN) 总结:三种遍历方式动图演示 三:二叉树的层序 ...

最新文章

  1. 转发和重定向的区别?
  2. python数据挖掘Hello World
  3. vectorvectorint 二维容器编程
  4. 首个进入Gartner领导者象限的中国数据库要开发布会了!
  5. 管理与决策这属于计算机在什么方面的应用,提供参考11级<计算机应用基础>...
  6. html(7)盒子模型
  7. 基于c语言实现bp算法,基于BP网络的自学习算法和C语言实现
  8. tomcat 域名配置、中文域名、别名配置
  9. Linux之执行一个可执行文件
  10. Webservice接口调用工具类
  11. Android基础教程(奋斗之小鸟)_PDF 电子书
  12. 如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。编程计算并输出所有的n的所有情况。
  13. Stata-DEA:数据包络分析一文读懂
  14. C/C++程序员工作面试的秘密
  15. 各大网站的主题色RGB值,做icon专用
  16. EL表达式中比较String类型数字的大小
  17. python按字典顺序输出单词频率_用python编写一段程序,输入若干单词,按照单词长短进行排序,并统计所有单词中每个字母(a-z)出现的次数...
  18. Python:import与from import的理解
  19. 关于路由器的配置参数
  20. 如何求水平渐近线(例题讲解)

热门文章

  1. Face3D学习笔记(5)3DMM示例源码解析【中下】从二维图片的特征点重建三维模型——黄金标准算法
  2. 如何测试自己适合什么大学专业
  3. ae 的动画导出为html,Bodymovin v5.5.5 AE脚本可以导出json格式在Web动画制作工具
  4. GJB 8114-2013中不恰当的编码规则解析
  5. 伍德里奇计量经济学第六版第七章计算机答案,伍德里奇计量经济学第六版答案Appendix-E...
  6. 《算法》第四版官网库及数据文件
  7. IceGrid应用 配置手册
  8. 分享一下好用的本地格式化软件hijson,这个居然还有人要收费才能下载,真是醉了
  9. FPGA、AD9371、AD9009、RF SOC介绍
  10. 台式计算机怎么安装无线信号接收器,电脑wifi接收器怎么用