树(一):树的定义及术语

树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或简称为树根。

我们可以形式地给出树的递归定义如下:

树(tree)是n(n ≥ 0)个结点的有限集。它或者是一棵空树(n = 0),空树中不包含任何结点,或者是一棵非空树(n > 0),此时有且仅有一个特定的称为根(root)的结点;当n > 1 时,其余结点可分为m(m > 0)个互不相交的有限集,其中每一个本身又是一棵树,并且称为根的子树(sub tree)。

下面给出树结构中的一些基本术语:

  • 结点的层次和树的深度
    树的结点包含一个数据元素及若干指向其子树的若干分支。结点的层次(level)从根开始定义,层次数为0 的结点是根结点,其子树的根的层次数为1。若结点在L 层,其子树的根就在L+1 层。对于层次为k(k > 0)的每个结点c,都有且仅有一个层次为k-1 的结点p与之对应,p 称为c 的父亲(parent)或父结点。若p 是c 的父亲,则c 称为p 的孩子(child)。父子之间的连线是树的一条边。在树中根结点没有父亲,其余结点只有一个父结点,但是却可能有多个孩子,同一结点的孩子相互称为兄弟(sibling)。树中结点的最大层次数称为树的深度(Depth)或高度。树中结点也有高度,其高度是以该结点为根的树的高度。

  • 结点的度与树的度
    结点拥有的子树的数目称为结点的度(Degree)。度为 0 的结点称为叶子(leaf)或终端结点。度不为0 的结点称为非终端结点或分支结点。除根之外的分支结点也称为内部结点。在这里需要注意的是结点的直接前驱结点,即它的父结点不计入其度数。

在树结构中有一个重要的性质如下:

树中的结点数等于树的边数加1,也等于所有结点的度数之和加1。

这是因为除根结点以外每个结点都与指向它的一条边对应,所以除根结点以外的结点数等于树中边数之和。因此树中的结点数等于树的边数加1。而边数之和就是所有结点的度数之和,因此树中的结点数也等于所有结点的度数之和加1。

说明在树中结点总数与边的总数是相当的,基于这一事实,在对涉及树结构的算法复杂性进行分析时,可以用结点的数目作为规模的度量。

  • 路径
    在树中k+1 个结点通过k条边连接构成的序列{(v ,v ),(v ,v ), … ,(v ,v )| k ≥ 0},称为长度为k的路径(path)。注意,此时忽略了树中边的方向。由单个结点,0 条边构成的是长度为0 的路径。

树中任意两个结点之间都存在唯一的路径。
这意味着树既是连通的,同时又不会出现环路。从根结点开始,存在到其他任意结点的一条唯一路径,根到某个结点路径的长度,恰好是该结点的层次数。

  • 祖先、子孙、堂兄弟
    将父子关系进行扩展,就可以得到祖先、子孙、堂兄弟等关系。结点的祖先是从根到该结点路径上的所有结点。以某结点为根的树中的任一结点都称为该结点的子孙。父亲在同一层次的结点互为堂兄弟。

  • 有序树、m 叉树
    如果将树中结点的各子树看成是从左至右是有次序的,则称该树为有序树;若不考虑子树的顺序则称为无序树。对于有序树,我们可以明确的定义每个结点的第一个孩子、第二个孩子等,直到最后一个孩子。若不特别指明,一般讨论的树都是有序树。

树中所有结点最大度数为 m 的有序树称为 m 叉树。

  • 森林
    森林(forest)是 m(m ≥ 0 )棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。树和森林的概念相近。删去一棵树的根,就得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。

你可能感兴趣的:(树(一):树的定义及术语)