数据结构与算法分析-二叉树,树和森林

二叉树,树和森林

考试内容

二叉树、树和森林的定义

树:

树(Tree)是n(n>=0)个结点的有限集,它或为空树(n= 0); 或为非空树,对于非空树T:

  • 有且仅有一个称之为根的结点;
  • 除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1 , T2 , …,其中每
    一个集合本身又是一棵树, 并且称为根的子树。

二叉树:

二叉树(Binary Tree)是n(n>=0)个结点所构成的集合,它或为空树(n= 0); 或为非空树,对于非空树T:

  • 有且仅有一个称之为根的结点;
  • 除根结点以外的其余结点分为两个互不相交的子集T1和T2, 分别称为T的左子树和右子
    树,且T1和T2本身又都是二叉树。

二叉树和树的区别:

  • 二叉树每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点);
  • 二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的实现(包括顺序存储结构和链式存储结构)、二叉树的遍历;

顺序存储结构:

链式存储结构:

二叉树的遍历:
  • 前序遍历

若二叉树为空,则空操作;否则
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。

  • 中序遍历

若二叉树为空,则空操作;否则
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树;

  • 后序遍历

若二叉树为空,则空操作;否则
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点

二叉树结构下的应用及扩展,例如二叉检索树、2-3-4 树、Huffman 编码以及堆

二叉检索树
2-3-4树
Huffman编码

哈夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树

平衡二叉树的定义、平衡因子的定义以及平衡二叉树的旋转操作

平衡二叉树
平衡因子
平衡二叉树的旋转:

树和森林的存储结构、树和森林的遍历以及森林与二叉树的转换;

树和森林的储存结构
  • 双亲表示法

这种表示方法中, 以一组连续的存储单元存储树的结点,每个结点除了数据域data外,还附
设一个parent域用以指示其双亲结点的位置。

这种存储结构利用了每个结点(除根以外)只有唯一的双亲的性质。在这种存储结构下, 求
结点的双亲十分方便, 也很容易求树的根,但求结点的孩子时需要遍历整个结构

  • 孩子表示法

由于树中每个结点可能有多棵子树,则可用多重链表, 即每个结点有多个指针域, 其中每个
指针指向一棵子树的根结点

  • 孩子兄弟法

又称二叉树表示法,或二叉链表表示法,即以二叉链表做树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild 域和nextsibling域

这种存储结构的优点是它和二叉树的二叉链表表示完全一样, 便千将一般的树结构转换为二叉树进行处理, 利用二叉树的算法来实现对树的操作。因此孩子兄弟表示法是应用较为普遍的一种树的存储表示方法

森林与二叉树的转换:
  • 森林转换成二叉树

如果F={T1,T2,…,几}是森林,则可按如下规则转换成一棵二叉树B= (root, LB, RB)。
(1)若F为空,即m= o,'则B为空树;
(2)若F非空,即m"‘F-0, 则B的根root即为森林中第一棵树的根ROOT(T1 ); B的左子树
LB是从兀中根结点的子树森林F尸{T11, T12, …, T1m}转换而成的二叉树;其右子树RB是从森林
F’= {T2, T3 , …,几} 转换而成的二叉树

  • 二叉树转换成森林

如果B= (root, LB, RB)是一棵二叉树,则可按如下规则转换成森林F={T1,T2 , …,Tm}:
(1)若B为空,则F为空;
(2)若B非空,则F中第一棵树兀的根ROOT(T1 )即为二叉树B的根root; T1中根结点的子> 树森林F1是由B的左子树LB转换而成的森林;F中除T1之外其余树组成的森林F’={T2 ,T3 , …}是由B的右子树RB转换而成的森林。

树和森林的遍历

当以二叉树的儿子兄弟表示树时

树的先根遍历和后根遍历可借用二叉树的先序遍历和中序遍历的算法实现:

树的先根遍历==二叉树的先序遍历

树的后根遍历==二叉树的中序遍历

并查集抽象数据类型的定义以及实现;

考试要求

掌握二叉树、树和森林的定义以及它们之间的异同点

掌握二叉树的四种遍历,并具有能够依赖遍历完成对二叉树进行操作的能力

理解二叉树采用顺序存储结构和链式存储结构的差异性

掌握利用二叉树及其扩展下的检索技术

掌握 Huffman 编码、堆的实现及应用

理解平衡二叉树的意义

掌握平衡二叉树的旋转操作

掌握树、森林能够采用的各种存储方式的差异性

掌握树和森林与二叉树的转换

掌握树、森林在遍历方面和二叉树的不同以及相关性

理解并查集的意义,以及掌握并查集的基本操作的实现

上一篇:15、数据库读现象


下一篇:【JAVA】笔记(3)---封装;如何选择声明静态变量还是实例变量;如何选择声明静态方法还是实例方法;静态代码块与实例代码块的执行顺序与用途;