第一块:介绍二叉树的一些基本知识
1.1:二叉树的基本概念:
二叉树是每个结点最多有两个子树的树结构
1.2:二叉树的五种基本形态和两种特殊形态:
五种基本形态:
两种特殊形态:
1.3:二叉树的性质:
A、在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。
B、高度为k的二叉树,最多有2^k-1个结点(k>=0)。
C、对任何一棵二叉树,如果其叶结点有n个,度为2的非叶子结点有m个,则
n = m + 1。------终端结点=度为二的非叶结点+1----n0=n2+1
1.4:二叉树的存储结构—顺序存储和链式存储
见文档:https://www.cnblogs.com/yw-ah/p/5872516.html
第二块:介绍二叉树的递归遍历与层序遍历
可参考博客 https://blog.csdn.net/peiyao456/article/details/52667057
递归遍历:
2.1:先序遍历 (根左右)
2.2:中序遍历 (左根右)
2.3:后序遍历 (左右根)
层序遍历:一层一层遍历
第三块:介绍二叉树,树,森林之间的转换
将树转换为二叉树:
1. 在所有兄弟结点之间加一连线
2. 对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。
将一个森林转换为二叉树:
-
将森林中的每棵树变为二叉树
-
因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉树
二叉树转换为树
-
加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点…,都作为结点X的孩子。将结点X与这些右孩子结点用线连接起来。
-
去线。删除原二叉树中所有结点与其右孩子结点的连线。二叉树转换为森林:
二叉树转换为森林:
假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树
1.从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…。直到所有这些根节点与右孩子的连线都删除为止。
2.将每棵分离后的二叉树转换为树。
更多例题请见 https://jingyan.baidu.com/article/19020a0a743851529d28421a.html
第四块:最优二叉树之哈夫曼树
1了解基本概念,什么是哈夫曼树?
哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。
如何构造哈夫曼树并画出其对应的哈弗慢编码是重点,要考
-
WPL=7*2+5*2+2*2+4*2=36
-
WPL=7*3+5*3+4*2+2*1=46
-
WPL=4*3+2*3+5*2+7*1=35
所以(b)的带权路劲最小,故其是最优二叉树(哈夫曼树)
2掌握构建哈夫曼树
见文档:https://jingyan.baidu.com/article/380abd0a717c061d90192ca2.html
3哈夫曼编码
利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子节点都有一条路径,对路径上的各分支约定指向左子树的分支表示"0"码,指向右子树的分支表示"1"码,取每条路径上的"0"或"1"的序列作为各个叶子节点对应的字符编码,即是哈夫曼编码。
用二叉树设计哈夫曼前缀编码
A:0 C:10 B:110 D:111
第五块:线索二叉树
见博客https://www.cnblogs.com/guweiwei/p/7090050.html
引入二叉线索树的目的是什么:找一个节点的前驱后继的时候,比非二叉线索树强
第六块:补充树的基本知识
-
树是一种重要的非线性结构,具有一对多或者多对一的关系
-
度:一个结点所拥有的子树的个数称为结点的度
-
叶子结点或者终端结点:度为0的结点
-
非叶子节点或分支或者非终端结点:度不为0的结点
-
树的度:是树内各结点度最大的值
-
结点数=总度数+1
-
树的家族谱:孩子,祖先,双亲,堂兄弟
-
层次,深度:最大的层次
-
有序树:树中结点各子树看成从左到右是有次序的