一、定义:
n >= 0个互不相交的树的集合。
二、森林的相关操作:
1、森林转换为二叉树:
如果T1,……,Tn是一个森林,则对应于该森林的二叉树记为B(T1,……,Tn);
(1)若n = 0,为空
(2)根为森林中第一棵树T1的根;
左子树是B(T11,T12,……,T1m),其中T11,T12,……,T1m是T1根的所有子树;
右子树是B(T2,……,Tn)。
2、森林F的遍历:
(1)前序遍历森林
1)如果F为空,则返回
2)访问F的第一棵树的根结点
3)按前序顺序遍历第一棵树的全部子树
4)按前序顺序遍历F的其余的树
(2)中序遍历森林
1)如果F为空,则返回
2)按中序遍历第一棵树的全部子树
3)访问第一棵树的根结点
4)按中序遍历其余的树
(3)后序遍历森林
1)如果F为空,则返回
2)按后序遍历F的第一棵树的全部子树
3)按后序遍历F的其余的树
4)访问F的第一棵树的根结点
三、集合表示
1、基本概念:
(1)集合表示:即用树来表示集合
(2)合并(union):合并两个集合
(3)查找(find): 查找包含某元素的集合
(4)退化树(degenerate tree):树单链链接
2、加权规则:
(1)作用:避免产生退化树
(2)定义:union(i,j)如果树i的结点数少于树j的结点数,则令树j是树i的父亲;否则,令树i是树j的父亲。
(3)需要在树的根结点增加计数域
3、如果集合T是按加权规则所建立的具有n个结点的树,那么树T中任意结点的层数至多为[logn]下+1。
4、折叠规则:
如果j是从i到其根结点的路径上的一个结点,那么将j作为根结点的儿子。