数据结构 - 树 - 树的基本介绍
树的定义
树是由 \(n\) 个结点构成的有限集合,在任意一棵非空树中:
-
有且仅有一个称为根 root 的结点。
-
当 \(n>1\) 时,其余结点可分为若干个互不相交的集合,且这些集合中的每一个集合本身又是一棵树,称为根的子树。
(1) 数据对象
数据对象 D 是具有相同特性的数据元素的集合。
(2) 数据关系
若 D 为空集,则称为空树。否则:
-
D 中存在唯一称为根的数据元素;
-
当 \(n>1\) 时,其余结点可分为 \(m(m>0)\) 个互不相交的有限集 \(T_1\),\(T_2\),\(\cdots\),\(T_m\),其中每一棵子集本身又是一棵树,称为根的子树。
例子
对于一棵树 \(T=\{A,B,C,D,E,F,G,H,I,J\}\)。
\(A\) 是根,其余结点划分为三个互不相交的集合:
每一个集合又都是一棵树,它们是根 \(A\) 的子树。对于 \(T_1\),\(B\) 是根,其余结点又可以划分为两个互不相交的集合。
\(T_{11}\) 和 \(T_{12}\) 是 \(B\) 的子树。
其逻辑结构可以表示为下图:
从逻辑结构上看
-
树中只有根结点没有前驱;
-
除根外,其余结点有且仅有一个前驱;
-
树中的结点,可以有零个或多个后继;
-
除根之外的其他结点,都存在唯一一条从根到该结点的路径。
-
树是一种分支结构。
树的基本术语
结点:数据元素 \(+\) 若干指向子树的分支。
结点的度:分支的个数。
树的度:树中所有结点的度的最大值。
叶子结点:度为零的结点。
分支结点:度大于零的结点。
一般的树可能有隐性的序关系。
-
有序树:子树之间有明确的次序关系。
-
无序树:子树之间没有顺序要求。
(从根到结点的)路径:由从根到该结点所经过的分支和结点构成。
对结点进行一些分类上的说明。
孩子结点、子孙结点
兄弟节点、堂兄弟
双亲结点、祖先节点
结点的层次:假设根节点的层次为 \(1\),在第 \(k\) 层结点的子树的根结点,在第 \(k+1\) 层。
树的深度:树中叶子结点所在的最大层次。
森林:\(m \,(m \geqslant 0)\) 棵互不相交的树的集合。
则任何一棵非空树都是一个二元组
其中,\(\text{root}\) 称为根结点,\(\text{F}\) 称为子树森林。