目录
第七章 树
二叉树
1、性质
2、遍历算法
3、遍历算法的应用
1. 建立二叉树
①由带空指针标记的先序序列构造二叉树
②由先序序列和中序序列构造二叉树
由先序、后序两个遍历序列无法确定唯一的二叉树
2、计算二叉树中的结点个数
3、计算二叉树的高度
4、根据关键值查找结点
5、查找父结点
线索二叉树
1、定义
线索二叉树的存在是为了实现遍历序列中快速查找结点的前驱、后继,让结点中的指针指向结点在遍历序列中的前驱、后继。
2、分类
根据遍历顺序的不同,分为以下四种:
(1)先序线索二叉树
(2)中序线索二叉树
(3)后序线索二叉树
(4)层次线索二叉树
举例:中序线索二叉树
树的存储与操作
1、树的存储结构
实现树的存储的关键是:如何表示树中结点之间的逻辑关系
存储问题的出发点:如何表示结点的双亲和孩子。
表示方法如下:
①双亲表示法
以一组连续空间存储树的结点,在每个结点中设一个指示器指示双亲结点的位置。
②多叉链表表示法
二叉树的二叉链表结构采用了两个指针域存储结点可能有的孩子指针。树的多查链表表示法延伸了这种结构设计:若树的度为K,则在结点结构中设置K个孩子指针域,使所有结点同构。
③孩子链表表示法
每个结点的孩子以单链表的形式存储,n个结点有n个孩子链表,n个头指针又组成一个线性表,并以顺序存储结构存储。
④孩子兄弟表示法
以二叉链表作为树的存储结构,链表中的结点的两个指针分别指向该节点的第一个孩子结点和下一个兄弟结点。
2、树的构造
将树转为二叉树:
这里:1、树的先根遍历等价于其对应二叉树的先序遍历
2、树的后根遍历等价于其对应二叉树的中序遍历
3、Huffman树
Huffman树:给定一组确定权值的叶子结点,带权路径长度最小的二叉树。
①特点
权值越大的叶子节点越靠近根节点,而权值越小的叶子节点越远离根节点;
只有度为0(叶子结点)和度为2的(分支结点)的结点,不存在度为1的结点。
②构造
先取两个最小权值结点(2和4),权值相加得到新的权值结点(6),把新结点放入原先的权值队列中,再取出两个最小的权值结点(5和6),得到新结点(11),以此类推。
③Huffman编码
如上图,在构造好的Huffman树上 ,在路径上标记0和1(假设左孩子的那条边为0,右孩子的那条边为1,也可相反),便可进行Huffman编码。得到以上图中的编码方案。