图论中的树
总目录传送门:
目录
双亲/孩子/兄弟(parent/child/sibling)
树(Tree)
由一个或多个(n>=0)节点组成的有限集合T,有且仅有一个节点称为根(root),当n>1时,其余的节点为m(m>=0)个互不相交的有限集合T1,T2,...,Tm。每个集合本身又是棵树,称其为根的子树。注意:空树也是树,树具有递归性(树中有树)。
在图论中,树的形态和计算机中树的形态是不同的,是通过根节点向上分支,更像是一个“树”而不是“树根”,从根(root)开始开枝(branch)散叶(leaf):
之前我们讨论过图,对于图有了一定的认识以后,对于树的认识就会相对简单了:
我们可以说,树就是一种特别的图,用图来定义树就是:任意两点都联通,并且不存在回路的的图,我们把他称为树。由此可见,树的形态是多样的。
这样的也是树。
节点(node):
就是图(graph)的顶点(vertex),如上图中的顶点:0,1,2,3,4,5,6。
树枝(branch):
就是图(graph)的边(edge)。如上图中的0->1, 0->2, 1->3,, 2->4, 3->5, 3->6。
根(root):
一颗树可以想象成从某一个顶点开始进行分枝,那么这个顶点就是“根”。一颗树的每一个节点都可以作为根。如图中可以将节点0作为根。
叶子(leaf):
在一颗树上选定根后,如节点0作为根。由根开始不断分枝,途中所有无法再分枝的节点成为叶。如上图中,根为点0,则节点4,5,6是叶。
度(degree):
一个节点拥有的子树数称为节点的度(degree)。叶(leaf)也可以用度来定义:度为0的节点称为叶(leaf)。如上图中,根节点0的度就是2,节点4的度为0,也就是叶。
层/深度/高度(level/depth/height):
“高度”这个概念,是从最leaf开始计数,并且计数的起点是0。
“深度”这个概念,从根结点开始度量,并且计数起点也是0。(反过来看)
“层数”跟深度的计算类似,不过,计数起点是1,也就是说根节点的位于第1层。
在一颗树中选定根(root)后,按照每个点离根的距离,可以将树中的点分为多个层级。
而一个树的最大层级数称为树的深度(depth)或高度(height),
如上图的高度为4:节点->节点5或者节点->6
从节点0开始,是level 0
如节点1,2位于层1(level 1),下方的叶子3,4位于层2(level 1),节点2的高度是1,节点1的高度是2,节点4本身是叶,其高度是0,根节点0的高度是3。
双亲/孩子/兄弟(parent/child/sibling)
在一颗树中选定根(root)后,相邻的两点,靠近根的是双亲(parent),远一点的是孩子(child)。
如上图中,选择节点3为root,parent就是节点1,child就是节点5,6,sibling就是节点4
祖先/后代(ancestor/descendant)
在一颗树中选定根(root)后,一个点的双亲、双亲的双亲、……都是此点的祖先(ancestor),根节点是所有子节点的祖先,注意双亲(parent)也属于祖先。因此,祖先是一个集合概念。同理,一个点的孩子、孩子的孩子、……都是此点的后代(descendant),后代也是一个集合概念。
如上图中,选择节点3为root,parent就是节点1,ancestor就是{0,1,2}的集合。descendant就是{5,6}的集合。
森林(forest)
很多颗树的集合称为森林。森林中,树与树之间互不相交。