术语
- 结点的度:结点的子树个数
- 树的度:树的所有结点中最大的度数
- 结点的层次:规定根结点在 1 层,其他任一结点的层数是其父结点的层数 +1
- 树的深度(高度):树中所有结点中的最大层次
- 叶结点:度为 0 的结点
- 父结点:有子树的结点
- 子结点:A为B的父结点,则B为A的子结点
- 兄弟结点:具有同一父结点的各结点
- 祖先结点:沿树根到某一结点路径上的所有结点都是这个结点的祖先结点
- 子孙结点:某一结点的子树中所有的结点
- 堂兄弟结点:父结点在同一层的结点
- 森林:若干颗互不相交的树的集合
- 度为m的树:至少有一个结点的度为m
- m叉树:结点的度数不能超过m
- 结点的路径:这两个结点之间所经过的结点序列构成的
- 结点的路径长度:路径上所经过的边的个数
- 树的路径长度:从树根到每个结点的路径长度的总和
树
一、定义
n 个结点构成的有限集合,n = 0 时,为空树,其余结点可分为 m (m>0) 个互不相交的有限集合,每个集合都是一颗树,称为“子树”。
二、性质
任意一颗非空树有如下性质:
- 树中有一个称为“根(Root)”的特殊结点,除了根结点外,每个结点有且仅有一个父结点
- 树的结点数 = 总度数 + 1,一颗 n 个结点的树有 n-1 条边
三、一些结论
- 对于度为 m 的树和 m 叉树,其第 i 层的结点个数最多为 m i − 1 m^{i-1} mi−1 个
- 对于度为 m 的树和 m 叉树,假设共有 h 层,那么总共最多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m−1mh−1,利用等比数列求和公式求得。
- 高度为 h 的 m 叉树至少有 h 个结点,因为 m 叉树只规定了度不能超过 m,因此允许每个结点度为 1。
- 高度为 h,度为 m 的树至少有 h+m-1 个结点(高度为h,则已经有h个,度为m,则有一个结点有m个子结点,故再加 m,而这个结点已经在 h 中算过一次,因此有 h+m-1)。
- 具有 n 个结点的 m 叉树最小高度为 ⌈ l o g m n ( m − 1 ) + 1 ⌉ \lceil log_m^{n(m-1)+1}\rceil ⌈logmn(m−1)+1⌉ ,其中 ⌈ ⌉ \lceil\rceil ⌈⌉为向上取整。证明:高度最小的情况为所有结点都有 m 个孩子,即尽量让树呈横向。设高度为 h,则 h-1 层总共有 m h − 1 − 1 m − 1 \frac{m^{h-1}-1}{m-1} m−1mh−1−1个结点,h 层共有 m h − 1 m − 1 \frac{m^h-1}{m-1} m−1mh−1个结点,则有不等式
m h − 1 − 1 m − 1 < n ≤ m h − 1 m − 1 \frac{m^{h-1}-1}{m-1} <n≤ \frac{m^h-1}{m-1} m−1mh−1−1<n≤m−1mh−1
整理得
m h − 1 < n ( m − 1 ) + 1 ≤ m h m^{h-1} < n(m-1)+1 ≤ m^h mh−1<n(m−1)+1≤mh
同时取对数
h − 1 < l o g m n ( m − 1 ) + 1 ≤ h h-1 < log_m^{n(m-1)+1} ≤ h h−1<logmn(m−1)+1≤h
二叉树
一、定义
在一般的树上再加两个约束条件就构成了二叉树:
- 每个结点的度最多为2,即二叉树中的结点度只能为 0,1,2
- 子树有左右顺序,不能颠倒
二、分类
- 满二叉树:高度为 h,结点数为 2 h − 1 2^h-1 2