树
树的基本概念
树的定义
基本术语
- 祖先结点:从根到该节点所经分支上的所有结点,(包含父节点)。例:J的祖先结点:A、B、E
- 子孙结点:一个结点的直接后继和间接后继(包含子节点)。例: B的子孙结点:E、F、J、K
- 双亲结点(父结点):一个结点的直接前驱结点
- 孩子结点:一个结点的直接后继结点
- 兄弟结点:同一双亲结点的孩子结点之间互称兄弟结点
- 堂兄弟结点:父结点是兄弟关系或堂兄关系的结点
- 叶子结点:度为0的结点,无后继结点,也称终端结点。
- 分支结点:度不为0的结点,有后继结点,也称非终端结点。
- 度:树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。例:A的度=3,B的度=2,树的度=3。
- 深度:从根结点开始自顶向下逐层累加
- 高度:从叶结点开始子底向上逐层累加
- 层次:从根结点开始定义,根结点的层次=1。
- 有序树(无序树):树中结点各子树从左到右是有次序的,不能互换,则为有序树,否则为无序树
- 森林:m(m ≥ \geq ≥ 0)棵互不相交的树的集合
树的性质
度为m的树 | m叉树 |
---|---|
各结点的度的最大值 | 每个结点最多只能有m个孩子 |
任意结点的度 ≤ \le ≤ m | 任意结点的度 ≤ \le ≤ m |
至少有 一个结点 ≤ \le ≤ m | 允许所有结点的度 < < < m |
一定是非空树,至少有m+1个结点 | 可以是空树 |
第i层之多有 m i − 1 m^{i-1} mi−1个结点(i ≥ \geq ≥ 1) | 第i层之多有 m i − 1 m^{i-1} mi−1个结点(i ≥ \geq ≥ 1) |
高度为h、度为m的树至少有h+m-1个结点 | 高度为h的m叉树至多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m−1mh−1个结点 |
具有n个结点的m叉树,最小高度为 l o g m ( n ( m − 1 ) + 1 ) log_m(n(m-1)+1) logm(n(m−1)+1) |
二叉树
二叉树的定义
二叉树定义
- 二叉树 ≠ \neq =度为2的树
- 二叉树是有序树,有左右之分
几种特殊的二叉树
- 满二叉树(特殊的完全二叉树)
定义:一棵高度为h的,且含有 2 h − 1 2^h-1 2h−1 个结点的二叉树称为满二叉树
除叶子结点外,每个结点度都等于2
对于编号
i
的结点,若有双亲结点,双亲为 i 2 \frac{i}{2} 2i,左孩子 2 i 2i 2i,右孩子为 2 i + 1 2i+1 2i+1(看上图可推)
完全二叉树
- 若 i ≤ n 2 i\le \frac{n}{2} i≤2n,则结点
i
为分支结点
,否则为叶子结点。- 原因:第
n
个结点的父结点是 n 2 \frac{n}{2} 2n,所以其父结点的前面都是分支结点,父结点后面都是叶子结点
。
- 原因:第
- 按层序编号后,一旦出现某结点(编号为
i
)为叶子结点或只有左孩子,则编号大于i
的结点均为叶子结点。(与1意思相同) - 叶子结点只可能在层次最大的两层上出现。对于最大层次中的叶子结点,都依次排列在该层最左边的位置上。
- 若有度为1的结点,则只可能有一个,且该结点只有左孩子而无右孩子。
- 若
n
为奇数,则每个分支结点都有左孩子和右孩子:若n
为偶数,则编号最大的分支结点(编号为n/2
)只有左孩子,没有右孩子,其余分支结点左、右孩子都有。- 左孩子 2 i 2i 2i(偶数),右孩子为 2 i + 1 2i+1 2i+1 (奇数)
- 若 i ≤ n 2 i\le \frac{n}{2} i≤2n,则结点
二叉排序树
左子树上所有结点的关键字均小于根结点的关键字;右子树上的所有结点的关键字均大于根结点的关键字;左子树和右子树又各是一棵二叉排序树。平衡二叉树
树上任一结点的左子树和右子树的深度之差不超过1
二叉树的性质
非空二叉树的叶子结点=度为2的结点+1,即 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1。
非空二叉树上第
k
层上至多有 2 k − 1 2^k-1 2k−1个结点( k ≥ 1 k\geq1 k≥1)。高度为h的二叉树至多有 2 h − 1 2^h-1 2h−1个结点( h ≥ 1 h\geq1 h≥1)。
对于完全按从上到下、从左到右的顺序依次编号
1,2,…,n
,则有以下关系:- 当
i>1
时,结点i
的双亲的编号为i/2
,即当i
为偶数时,其双亲的编号为i/2
,它是双亲的左孩子;当i
为奇数时,其双亲的编号为(i-1)/2
,它是双亲的右孩子。 - 当 2 i ≤ n 2i\le n 2i≤n时,结点
i
的左孩子编号为2i
,否则无左孩子。 - 当 2 i + 1 ≤ n 2i+1\le n 2i+1≤n时,结点i的右孩子编号为
2i+1
,否则无右孩子. - 结点
i
所在层次(深度)为 l o g 2 i + 1 log_2i+1 log2i+1。
- 当
具有n个结点的完全二叉树的高度为 l o g 2 ( n + 1 ) log_2(n+1) log2(n+1)或 l o g 2 n + 1 log_2n+1 log2n+1。(要自己会推)