繁体
对于随机的树,
度的平均复杂度是o(logn),但是没有限制而且不随机的树
度也可以达到o(n),也就是除了叶节
都只有一个
树,或者常数个分支的情况。所以树作为数据结构时通常需要另外
行平衡。
如果一颗有
树每个节
的
树最多有n个,同时每个节
在其父节
中都有固定的可能可以留空的位置,这棵树叫
n叉树。其中每个节
都可以有两个固定位置的
树的有
树叫
二叉树,二叉树中每个节
的两个
树分别叫
左
树和右
树,由于位置固定,没有左
树的时候也是可以有右
树的。而“多叉树”通常并不指n为任意值的n叉树,只是在和n叉树作比较的时候表示普通的有
树。
对于
节
是有顺序的有
树,每条边都可以以固定的位置分别储存。对于完全二叉树甚至能直接用一个数组访问所有节
,不另外储存边的信息。有的树可以被设计成固定的从
节
开始访问,这时候可以不储存父节
。同样的,有的树也可以省略
节
,例如并查集。
树。。。。。
本章已阅读完毕(请
击下一章继续阅读!)
树的层数叫
这棵树的
度。节
最多的那一层的节
数叫
这棵树的宽度。对于有
树,每条边都有一个特殊的方向:指向
节
的方向,或者说上一层的方向(或者相反的,指向叶节
的方向,下一层的方向)。一条边的两个端
中,靠近
的那个节
叫
另一个节
的父节
(也叫父亲、双亲、双亲节
),相反的,距离
比较远的那个节
叫
另一个节
的
节
(也可以叫孩
,儿
,
女等)。父亲方向的所有节
都叫
这个节
的祖先,儿
方向的所有节
都叫
这个节
的
孙。没有
节
的
节
叫
叶节
(或者叶
节
)。由于到
的路径只有一条,
节
以外的节
的父节
永远只有一个,祖先就是这个
到
的路径上的所有节
(包括
,不包括这个节
本
)。另外,以一个节
为
的树是指包括这个节
和其所有
孙,并以这个节
为
的树。由于一般不需要这以外的
树,每一个节
也可以对应到一个以其为
的树,一个节
的
树通常也是指以这个节
的
节
为
的树。
对于普通的树,可以像图一样为每一个
存储一个边表(通常
顺序存和每一个
的关系的叫
邻接矩阵,存
的边的叫
邻接表),或者直接存储所有边的边表等。由于树是稀疏图,所以一般不用邻接矩阵存储。对于有
树,如果用为每一个
储存一个边表的方法,由于每一棵树都只有一个父节
,所以通常指向父节
的边不存在这个表中。同时如果
节
是没有顺序的,也是因为一个节
的
节
不会同时是其他节
的
节
,也可以把
节
直接当成存边的链表的节
,这时候每个节
只需要储存两个指针,所以这
存储方法有时候也会被叫
多叉树转二叉树。
说小于
数。
加载更多
存储
,以及合并两个集合等。