由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。
气死了气死了,为什么这个图片会有水印,而且水印还这么奇怪!!!!!!!
目录
一、树的基本概念
二、二叉树
三、二叉树的遍历
1. 四种遍历
2. 线索树
四、树和森林
1. 树转换成二叉树
2. 森林转换成二叉树
3. 二叉树转换成森林
五、二叉排序树
六、哈夫曼树
1. 构造哈夫曼树
2. 哈夫曼编码
【书后典型例题】
一、树的基本概念
- 根到结点的唯一路径上的任意结点,称为结点的祖先。
- 路径上最接近结点的结点称为的双亲,而为结点的孩子。
- 树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。
- 度大于的结点称为分支结点(又称非终端结点);度为(没有孩子结点)的结点称为叶子结点(又称终端结点)。
- 有相同双亲的结点称为兄弟。
- 结点的层次从树根开始递归定义,根结点为第层,它的子结点为第层。
- 结点的深度是从根结点开始自顶向下逐层累加。
- 结点的高度是从叶结点开始自底向上逐层累加。
- 树的高度(或深度)是树中结点的最大层数。
- 有序树和无序树。树中结点的各子树从左到右是有次序的,不能互换,称该树为有序树,否则称为无序树。假设图为有序树,若将子结点位置互换,则变成一颗不同的树。
- 路径和路径长度。树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,而路径长度是路径上所经过的边的个数。
二、二叉树
三、二叉树的遍历
1. 四种遍历
先序(前序)遍历:根->左子树->右子树
中序遍历:左子树->根->右子树
后序遍历:左子树->右子树->根
层序遍历:按顺序把每一行的结点输出
注意:在知道遍历的结果,需要还原二叉树时,只知道一种遍历结果是不能还原的。必须要知道中序遍历+其他任一种遍历结果才可还原。还原二叉树的重点就在于找到根节点。
以前序遍历+中序遍历为例:
2. 线索树
什么线索树就先把对应的遍历结果写出来。用虚线的箭头画出前驱和后继结点。没有左孩子就画前驱,没有右孩子就画后继,叶子结点既要画前驱也要画后继。
注意:遍历结果的最后一个有时候没有右孩子,这个时候要画一个指向null。第一个有时候没有左孩子,也要指向null。
PS: 看不懂这里的可以看一下最后一部分的例题。
四、树和森林
树的存储结构:双亲表示法、孩子表示法、孩子兄弟表示法。
1. 树转换成二叉树
2. 森林转换成二叉树
3. 二叉树转换成森林
实际上就是森林变成二叉树的逆过程。
五、二叉排序树
六、哈夫曼树
1. 构造哈夫曼树
注意:这个地方是要从新构造的结点和其他剩余的结点里取最小的继续构造,但是当遇到新构造的结点值在其他剩余的结点里有相同的值,优先使用原来就提供的结点。(可以看一下最后一个例题,顺便了解一下初态和终态)
2. 哈夫曼编码
这一步就很简单了,左子树为0,右子树为1,然后从根节点开始读就可以了。