一、基本概念
树(tree)是n(n>=0)个结点的有限集合它:
- 或者是一棵空树(n=0),空树中不包含任何结点。
- 或者是一颗非空树,此时有且仅有一个特定的称为根(root)的节点。
- 当 n>1 时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、...、Tm,其中每一个本身又是一棵树,并且称为根的子树(sub tree)。
- 如图:a是一颗空树,b是只有一个根结点的树,c是一颗有10个结点的树,其中A是根结点,其余的结点分成3个不相交的结合:T1={B,E,F}、T2={C,G}、T3={D,H,I,J},每个结合都是一棵树,且都是根的子树。
- 生活案例:树、单位组织架构、族谱、文件系统
结点的度和树的度
- 结点拥有的子树的数目称为结点的度(Degree)。
- 度为0的结点称为叶子(leaf)或终端结点。
- 度不为0的结点称为非终端结点或分支结点,除根结点之外的分支结点也称为内部结点。
- 树内各结点的度的最大值称为树的度。
结点的层次和树的深度
- 结点的层次(level)从根开始定义,层次数为1的结点是根结点,其子树的根的层次为2。
- 树种结点的最大层次数称为树的深度(Depth)或高度
父亲、儿子、兄弟
- 父亲(parent):一个结点的直接前驱结点。
- 儿子(child):一个结点的直接后继结点。
- 兄弟(sibling):同一个父亲结点的其它结点。
- 结点A是结点B、C、D的父亲,结点B、C、D是结点A的孩子,由于结点H、I、J有同一个父节点D,因此他们互为兄弟。
祖先、子孙、堂兄弟
- 将父子关系进行扩展就可以得到祖先、子孙、堂兄弟等关系。
- 祖先:从根结点到该结点路劲上的所有节点。
- 子孙:以某结点为根的树中的任一结点。
- 堂兄弟:父亲在同一层次的节点。
有序树、m叉树、森林
- 有序树:树中结点的各子树看成从左至右是有次序的。
- 无序树:不考虑子树的顺序。
- 对于有序树,我们可以明确的定义每个结点的第一个孩子、第二个孩子等、直到最后一个孩子。
- 若不特别指明,一般讨论的树都是有序树。
- 树中所有结点最大度数为m的有序树称为m叉树。
- 森林(forest)是m(m>=0)棵互不相交的树的集合,对树中每个结点而言,其子树的集合即为森林。
- 树和森林的的概念相近。删去一棵树的根就得到一个森林;反之加上一个结点作为根,森林就变为一棵树。