树与二叉树


1. 树的基本概念
树是n(n≥0)个结点的有限集合,n = 0时,称为空树,这是一种特殊情况。在任意一棵非空树中应满足:
1)有且仅有一个特定的称为根的结点。
2)当n > 1时,其余结点可分为m(m > 0)个互不相交的有限集合T1, T2,…, Tm,其中每个集合本身又是一棵树,并且称为根结点的子树。
结点的度——有几个孩子(分支)
树的度——各结点的度的最大值
树的常考性质:
常见考点1:结点数=总度数+1
常见考点2:度为m的树、m叉树的区别
常见考点3:度为m的树第i 层至多有mi-1 个结点(i≥1);m叉树第i 层至多有mi-1 个结点(i≥1)。
常见考点5:高度为h的m叉树至少有h 个结点。高度为h、度为m的树至少有h+m-1 个结点。
常见考点6:具有n个结点的m叉树的最小高度为logm(n(m - 1) + 1)
2. 二叉树
2.1 二叉树的定义及其主要特征
二叉树是n(n≥0)个结点的有限集合:
① 或者为空二叉树,即n = 0。
② 或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
特点:①每个结点至多只有两棵子树②左右子树不能颠倒(二叉树是有序树)
满二叉树。 一棵高度为h,且含有2h - 1个结点的二叉树。
特点:①只有最后一层有叶子结点。②不存在度为1 的结点。③按层序从1 开始编号,结点i 的左孩子为2i,右孩子为2i+1;结点i 的父节点为𝑖/2 (如果有的话)。
完全二叉树。 当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。
特点:①只有最后两层可能有叶子结点。②最多只有一个度为1的结点③按层序从1 开始编号,结点i 的左孩子为2i,右孩子为2i+1;结点i 的父节点为𝑖/2 (如果有的话)。④ i≤ 𝑛/2 为分支结点, i> 𝑛/2 为叶子结点。
二叉排序树。 一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:
左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树。
平衡二叉树。 树上任一结点的左子树和右子树的深度之差不超过1。
二叉树的常考性质:
常见考点1:设非空二叉树中度为0、1和2的结点个数分别为n0、n1和n2,则n0 = n2 + 1(叶子结点比二分支结点多一个)。
常见考点2:二叉树第i 层至多有2i-1 个结点(i≥1)。m叉树第i 层至多有mi-1 个结点(i≥1)
常见考点3:高度为h的二叉树至多有2ℎ − 1个结点(满二叉树)。
完全二叉树的常考性质:
常见考点2:对于完全二叉树,可以由的结点数n 推出度为0、1和2的结点个数为n0、n1和n2。
若完全二叉树有2k个(偶数)个结点,则必有n1=1, n0 = k, n2 = k-1。
若完全二叉树有2k-1个(奇数)个结点,则必有n1=0, n0 = k, n2 = k-1。
n1=0或1,n0 + n2 一定是奇数。
2.2 二叉树的顺序存储结构和链式存储结构


2.3 二叉树的遍历
2.3.1 先序遍历:根左右(NLR)
- 若二叉树为空,则什么也不做;
- 若二叉树非空:①访问根结点;②先序遍历左子树;③先序遍历右子树。

2.3.2 中序遍历:左根右(LNR)
- 若二叉树为空,则什么也不做;
- 若二叉树非空:①中序遍历左子树;②访问根结点;③中序遍历右子树。

2.3.3 后序遍历:左右根(LRN)
- 若二叉树为空,则什么也不做;
- 若二叉树非空:①后序遍历左子树;②后序遍历右子树;③访问根结点。

2.3.4 层序遍历
算法思想:①初始化一个辅助队列;②根结点入队;③若队列非空,则队头结点出队,访问该结点,并将其左、右孩子插入队尾(如果有的话);④重复③直至队列为空。



2.4 线索二叉树的基本概念和构造













3. 树、森林
3.1 树的存储结构

优点:查指定结点的双亲很方便。缺点:查指定结点的孩子只能从头遍历。


3.2 森林与二叉树的转换
森林。森林是m(m≥0)棵互不相交的树的集合。
本质:用二叉链表存储森林。

3.3 树和森林的遍历
3.3.1 树的遍历
1)先根遍历。 若树非空,先访问根结点,再依次对每棵子树进行先根遍历。深度优先遍历


2)后根遍历。 若树非空,先依次对每棵子树进行后根遍历,最后再访问根结点。深度优先遍历


3)层次遍历(用队列实现) ①若树非空,则根节点入队;②若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队;③重复②直到队列为空。广度优先遍历
3.3.2 森林的遍历


4. 树与二叉树的应用
4.1 二叉搜索树
二叉排序树,又称二叉查找树(BST,Binary Search Tree) 一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:
左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树。
二叉排序树的查找:


二叉排序树的插入:


二叉排序树的删除: 重点考点
先搜索找到目标结点:
① 若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。
② 若结点z只有一棵左子树或右子树,则让z的子树成为z父结点的子树,替代z的位置。
③ 若结点z有左、右两棵子树,则令z的直接后继(或直接前驱)替代z,然后从二叉排序树中删去这个直接后继(或直接前驱),这样就转换成了第一或第二种情况。

4.2 平衡二叉树
平衡二叉树(Balanced Binary Tree),简称平衡树(AVL树)——树上任一结点的左子树和右子树的高度之差不超过1。
结点的平衡因子=左子树高-右子树高。






4.3 哈夫曼(Huffman)树和哈夫曼编码

在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。
哈夫曼树的构造:
给定n个权值分别为w1, w2,…, wn的结点,构造哈夫曼树的算法描述如下:
1)将这n个结点分别作为n棵仅含一个结点的二叉树,构成森林F。
2)构造一个新结点,从F中选取两棵根结点权值最小的树作为新结点的左、右子树,并且将新结点的权值置为左、右子树上根结点的权值之和。
3)从F中删除刚才选出的两棵树,同时将新得到的树加入F中。
4)重复步骤2)和3),直至F中只剩下一棵树为止。
特点:
1)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大
2)哈夫曼树的结点总数为2n − 1
3)哈夫曼树中不存在度为1的结点。
4)哈夫曼树并不唯一,但WPL必然相同且为最优
哈夫曼编码:
固定长度编码——每个字符用相等长度的二进制位表示。
可变长度编码——允许对不同字符用不等长的二进制位表示。
若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。
有哈夫曼树得到哈夫曼编码——字符集中的每个字符作为一个叶子结点,各个字符出现的频度作为结点的权值,根据之前介绍的方法构造哈夫曼树。
哈夫曼树不唯一,因此哈夫曼编码不唯一。
哈夫曼编码可用于数据压缩。









被折叠的 条评论
为什么被折叠?



