数据结构 第5章 树与二叉树
5.1 树的基本概念(3 4 7)
5.2 二叉树的概念(2 14 19 22)
5.3 二叉树的遍历和线索二叉树(1 3 4 5 9 18 19 21 25 33 36)
5.4 树、森林(6 12)
5.5 树与二叉树的应用(4 5 7 8 10)
5.1 树的基本概念
- T3
树的路径长度:从树根到每个结点的路径长度总和
区分:哈弗曼树的带权路径长度 - T4
重点理解(树的基本术语):
度:每个结点的分支数;度>0是分支节点,度=0是叶结点/终端结点
高度:=层数,根结点为第一层,h=1;eg:结点数为3的满二叉树h=2
路径:两结点路径长度/树的路径长度(总和)
5.2 二叉树的概念
- T1
含有n个结点的完全二叉树的高度为:log(n+1)向上取整 或 logn向下取整+1
eg:n=4,h=3 - T2
(判断)结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子编号为2i。
错误,可能没有左孩子,若有为2i,层序编号从1开始 - T10 T19
一棵完全二叉树第六层有n个叶子结点,共有多少叶子结点?(易错)
此处有两种情况:最少(只有六层,第六层不满)、最多(有七层,第六层满第七层不满) - T14
二叉树/完全二叉树的特点:n0=n2+1
完全二叉树的特点:n1=0或1
(以上结论,常用于:根据叶结点,计算完全二叉树的结点数)
5.3 二叉树的遍历和线索二叉树
- T5
不理解(涉及到栈)
若m是n的祖先,则使用后序遍历可以找到从m到n的路径 - T18
线索二叉树是物理结构(链表),二叉树是逻辑结构 - T19 21
n个结点的线索二叉树上含有线索数为:n+1
(计算:一共左右指针有2n,除根节点外每个结点一个指针指向n-1,2n-(n-1)=n+1)
其中,空链域的具体计算,看排序后的第一个元素是否有左孩子,最后一个元素是否有右孩子,没有则为空链域。 - T22 T25
先序线索二叉树:找后继简单,找前驱若为左孩子指针,则需知道其双亲结点。
后序线索二叉树:找前驱简单,后继麻烦。
后序线索数的遍历需要栈的支持,因为后序线索二叉树,若右指针指向右孩子,找后继结点很麻烦。 - T33
根据先序确定二叉树的个数:
前序和中序确定一个二叉树,二叉树个数=中序排列个数;前序可看为入栈,中序可看为出栈顺序。
5.4 树、森林
- T1
一棵树的叶子结点不一定等于其对应的二叉树的叶子数,若叶子结点的任意两个结点都无相同双亲,才相等。 - T6
森林中有n个非终端结点,则对应二叉树中右指针为空的结点有n+1个。
理解:右指针为空=无右兄弟,每个非终端结点的孩子们总有一个没有右兄弟(n)+根节点没有右兄弟(1) - T12
有时选择题求解,可以使用:特殊举例法
5.5 树与二叉树的应用
- T7
度为m的哈弗曼树:只要是非终端结点,度都为m;N=n0+nm,N=m*nm-1 - T8
并查集:双亲表示法
用一个**数组s[]**表示“集合”,数值中存储的是双亲。 - T10
并查集与图:
1)并查集可用于实现Kruskal算法求图的最小生成树
2)并查集可用于判断无向图的连通性
Find和Union的时间复杂度
1)未优化:Find为O(n),Union为O(n2)
2)Union优化(Union构建时尽量减少树高):Find为O(logn),Union为O(nlogn)
3)Find优化(压缩路径,查找路径上的结点全部挂到根节点下):Find为O(a(n)),Union为O(na(n))