1、树的性质
- 树中结点数 = 所有结点度数 + 1。
- 度为 m 的树中第i层至多有$ m^{i-1} $ 个结点($ i\ge1$)。
- 高度为 h 的 m 叉树至多有$ (m^h-1)/(m-1)$ 个结点。
- 具有 n 个结点的 m 叉树的最小高度为$ \lceil log_m(n*(m-1)+1)\rceil $。
- 总分支数 = 1 n 1 + 2 n 2 + 3 n 3 + … + m n m ( 度为 m 的结点分出 m 条分支 ) 1n_1+2n_2+3n_3+…+mn_m(度为m的结点分出m条分支) 1n1+2n2+3n3+…+mnm(度为m的结点分出m条分支)。
- 总结点数 = $ n_0 + n_1 + n_2 +…+n_m(n_i表示度为i的结点个数)$。
- 总结点数 = 总分支数 + 1。
- 任意一棵树,结点数量为 n,则边的数量为 n - 1。
2、二叉树的性质
- 非空二叉树的叶子结点数等于度为 2 的结点数加 1,即 n 0 = n 2 + 1 n_0 = n_2 + 1 n0=n2+1。
- 结点总数 n = n 0 + n 1 + n 2 = n 1 + 2 n 2 + 1 n = n_0 + n_1 + n_2 = n_1 + 2n_2 + 1 n=n0+n1+n2=n1+2n2+1。
- 非空二叉树第 k 层至多有 2 k − 1 2^{k-1} 2k−1 个结点($ k\ge1$)。
- 高度为 h 的二叉树至多有 2 h − 1 2^h-1 2h−1 个结点($ h\ge1$)。
- n 个结点的完全二叉树高度为 $ \lceil log_2(n+1) \rceil 或者\lfloor log_2 n \rfloor+1$。
- 对于完全二叉树,其结点个数 n = n 1 + 2 n 2 + 1 n = n_1 + 2n_2 + 1 n=n1+2n2+1,若结点数为偶数 2k 时, n 1 = 1 , n 2 = k − 1 , n 0 = k ; n_1 = 1,n_2 = k - 1,n_0 = k; n1=1,n2=k−1,n0=k;若结点数为奇数 2k + 1 时, n 1 = 0 , n 2 = k , n 0 = k + 1 n_1 = 0,n_2 = k ,n_0 = k+1 n1=0,n2=k,n0=k+1。
若有度为 1 的结点有且只有一个,即最末尾的叶子结点的父结点。
- n 个结点的二叉链表中,空链域的个数为 n + 1。
n 个结点的二叉链表,总链域个数 = 2n,由于(除根结点外)每个结点都被其父结点指向,占用 n - 1 个链域,或使用树性质8,可知边的个数为 n - 1,即占用n - 1条链域,得出空链域 = 2n - (n - 1) = n + 1。
3、二叉树的遍历性质
- 前序(先序)遍历:根、左、右。
void PreOrder(BiTree T){
if(T != NULL) {
visit(T);
PreOrder(T->lChild);
PreOrder(T->rChild);
}
}
- 中序遍历:左、根、右。
void InOrder(BiTree T){
if(T != NULL) {
InOrder(T->lChild);
visit(T);
InOrder(T->rChild);
}
}
- 后序遍历:左、右、根。
void PostOrder(BiTree T){
if(T != NULL) {
PostOrder(T->lChild);
PostOrder(T->rChild);
visit(T);
}
}
-
层序遍历
-
先序序列与中序序列可唯一确定一棵二叉树。
-
后序序列与中序序列可唯一确定一棵二叉树。
-
层序序列与中序序列可唯一确定一棵二叉树。
-
前中后序遍历对左右孩子访问序列的相对位置不会改变。
-
遍历时叶子结点的先后顺序不会改变。
-
n 个元素以先序序列进栈,可确定不同的二叉树为 1 n + 1 C 2 n n \frac{1}{n+1}C^n_{2n} n+11C2nn 个。
-
先序序列与中序序列相同(根左右 = 左根右) ⇒ \Rightarrow ⇒ 该二叉树只有右子树。
-
先序序列与中序序列相反(根左右 = 左根右) ⇒ \Rightarrow ⇒ 该二叉树只有左子树。
-
先序序列与后序序列相同(根左右 = 左右根) ⇒ \Rightarrow ⇒ 该二叉树只有根结点。
-
先序序列与后序序列相反(根左右 = 左右根)或(根左右 = 左右根) ⇒ \Rightarrow ⇒ 该二叉树高度等于结点个数。即结点只有左子树或右子树。
-
中序序列与后序序列相同(左根右 = 左右根) ⇒ \Rightarrow ⇒ 该二叉树只有左子树。
-
中序序列与后序序列相反(左根右 = 左右根) ⇒ \Rightarrow ⇒ 该二叉树只有右子树。