16. 树
一、什么是树
树是 n(n≥0)个 结点 的有限集合,n=0 时,称为 空树,这是一种特殊的情况。在任意一颗 非空树 中应该满足以下条件:
- 有且仅有一个特定的称为 根 的结点。
- 当 n≥1 时,其余结点可分为 m(m>0)个 互不相交的有限集合 \(T_{1}, T_{2}, ..., T_{m}\),其中每个集合本身又是一棵树,并且称为原来树的子树。
树的一些常用术语如下:
- 结点的度:结点的子树个数。
- 树的度:树的所有结点中最大的度数。
- 叶结点:度为 0 的结点。
- 父结点:有子树的结点是其子树的根结点的父结点。
- 子结点:若 A 结点是 B 结点的父结点,则称 B 结点是 A 结点的子结点。子结点也称孩子结点。
- 兄弟结点:具有同一父结点的各节点彼此是兄弟结点。
- 路径和路径的长度:从结点 \(n_{1}\) 到 \(n_{k}\) 的路径为一个结点序列 \(n_{1}, n_{2}, ..., n_{k}\),\(n_{i}\) 是 \(n_{i+1}\) 的父结点。路径所包含边的个数为路径的长度。
- 祖先结点:沿树根到某一结点路径上的所有结点都是这个结点的祖先结点。
- 子孙结点:某一结点的子树中的所有结点是这个结点的子孙。
- 结点的层次:规定根结点在 1 层,其它任一结点的层数是其父结点的层数加 1。
- 树的深度:树中所有结点中的最大层次是这棵树的深度。
- 森林:多颗子树构成森林。
子树是不相交的;
除了根结点外,每个结点有且仅有一个父结点。
一颗 N 个结点的树有 N-1 条边。
二、树的表示
这里,我们使用 儿子兄弟表示法 表示一棵树。结点有两个指针域,一个指向它的 儿子结点,另一个指向它的 兄弟结点。