树和二叉树的知识点考前总结

先放一张自己做的思维导图,当时思路不是太清晰,只能看出来当时学的大概是啥。。。
在这里插入图片描述
*

树:

1、逻辑结构的一种。
2、树中包含的基本概念。
①结点、度、层次
在这里插入图片描述

②双亲、孩子、兄弟
在这里插入图片描述

二叉树

1、为什么要研究二叉树。。

二叉树的结构最简单,规律性最强;
所有树都能转为唯一对应的二叉树, 不失一般性。
(二叉树不是树。)

2、特殊二叉树(满二叉树完全二叉树

满二叉树 :一棵深度为k且有2k-1个结点的二叉树。(特点:除叶子结点外的结点度都为2)
满二叉树

完全二叉树 :深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一 一 对应。(特点:只有最后一层叶子不满且全部集中在左边
在这里插入图片描述
关系:满二叉树必为完全二叉树,完全二叉树不一定是满二叉树。

3、二叉树的性质:

① . 在二叉树的第 i 层上至多有 2(i-1) 个结点。

② . 深度为 k 的二叉树至多有 2k-1 个结点。深度为 k 时至少有_ k_个结点。

③ . 叶子结点数 = 度为2的结点数 + 1

④ . 具有 n 个结点的完全二叉树的深度必为 [log2n]+1([log2n]表示取log2n能取到的的最大整数)

⑤ . 对完全二叉树,若从上至下、从左至右编号,则编号为i的结点,其左孩子编号必为2i,其右孩子编号必为2i+1;其双亲的编号必为i/2。

4、二叉树的三种遍历

前(先)序遍历:根左右
中序遍历:左根右
后序遍历:左右根
注意:以上三个每个子树也都是按这个来的。
层序遍历:一层一层的访问,一层访问结束再访问下一层。
在这里插入图片描述

遍历定义:指按某条搜索路线遍访每个结点且不重复(又称周游)。
遍历用途:是树结构插入、删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。

哈夫曼树

1、就是之前离散里学的最优二叉树,即带权路径长度最短的二叉树。

权值:结点表达出的数值大小,或者变换的表示为概率大小
路径:根结点到达当前结点的分支数,左分支和右分支具有不同意义

2、哈夫曼树的构造过程:
① . (统计出每种字符出现的频率),对结点权值升序排序,从结点序列中选择两个权值最小(两个最小的实数)的结点,小的放左边,大的放右边,创建新的结点,如选择1,2实数作为结点,则创建的结点的权为3。

② . 从序列中删除上一步选择的两个结点,再选一个最小的,将新创建的结点加入序列。重复执行以上两步,最终节点序列中剩余的一个结点即为最终的根结点。

3、哈夫曼编码。
在每个路径上都添上 0 或 1,规则左0 右1。从根结点数到对应的叶子结点,路径上的值拼接起来就是叶子结点字母的应该的编码。

森林←→二叉树←→树,三者相互转换

1、将树转换为二叉树:

① . 在每层的所有兄弟结点之间加一连线。
② . 对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。
在这里插入图片描述

2、将森林转换为二叉树:

① . 将森林中的每棵树变为二叉树;
② . 因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树。

在这里插入图片描述

3、二叉树转换为树:

其实就是是树转换为二叉树的逆过程。

① . 加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点…,都作为结点X的孩子。将结点X与这些右孩子结点用线连接起来。
② . 去线。删除原二叉树中所有结点与其右孩子结点的连线。

在这里插入图片描述

4、二叉树转换为森林:

假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。

① . 从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除……直到所有这些根节点与右孩子的连线都删除为止。
② . 将每棵分离后的二叉树转换为树。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45884783/article/details/108159347
今日推荐