王道-考研-数据结构-树与二叉树
1. 树的基本概念
树是 \(n(n \geq 0)\) 个结点的有限集合,\(n=0\) 时,称为空树。
而任意非空树应满足:
- 有且仅有一个特定的称为根的结点。
- 当 \(n>0\) 时,其余结点可分为 \(m(m \geq 0)\) 个互不相交的有限集合,其中每一个集合本身又是一棵树,称为根结点的子树。
\(n\) 个结点的树中只有 \(n-1\) 条边。
2. 基本术语
- 祖先结点和子孙结点
- 双亲结点和孩子结点
- 兄弟结点
- (结点的)度:树中一个结点的子结点的个数称为该结点的度。
- (树的)度:树中最大度数。
- 分支结点:度大于 \(0\) 的结点。
- 叶子结点:度为 \(0\) 的结点。
- 结点的层次:根结点为第一层(或第零层)。
- 结点的高度:从叶子结点(第一层)开始逐层累加。
- 结点的深度:从根结点(第一层)开始逐层累加。
- 树的高度(深度)是树中结点的最大层数。
- 有序树和无序树
- 路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。(树的分支是有向的,即从双亲结点指向孩子结点,所以路径一定是自上而下的。)
- 路径长度:路径上所经过边的个数。
- 森林:\(m(m \geq 0)\) 棵互不相交的树的集合。
3. 树的性质
- 树中结点 等于 所有结点的度加 \(1\)。
- 度为 \(m\) 的树中第 \(i\) 层上至少有 \(m^{i-1}\) 个结点(\(i \geq 1\))。
- 高度为 \(h\) 的 \(m\) 叉树至多有 \((m^h-1)/(m-1)\) 个结点。
- 具有 \(n\) 个结点的 \(m\) 叉树的最小高度为:\(\left \lceil log_m(n(m-1)+1) \right \rceil\)。
性质二说明:
- 第一层:\(1=m^0\)
- 第二层:\(1=m^1\)
- 第三层:\(1=m^2\)
- ...
- 第 \(i\) 层:\(1=m^{i-1}\)
二叉树
二叉树是 \(n(n \geq 0)\) 个结点的有限集合。
- \(n=0\) 时,二叉树为空。
- \(n>0\) 时,由根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树也分别是一棵二叉树。
1. 五种基本形态
- 空树
- 仅有根结点
- 根结点+左子树
- 根结点+右子树
- 根结点+左子树+右子树
2. 二叉树 VS 度为 2 的有序树
- 二叉树可以为空,而度为 2 的有序树至少有三个结点。
- 二叉树的孩子结点始终有左右之分,而度为 2 的有序树孩子结点的次序是相对的。
3. 特殊二叉树
3.1. 满二叉树
一颗高度为 \(h\),且含有 \(2^h-1\) 个结点的二叉树称为满二叉树。(高度为 \(h\) 的 \(m\) 叉树至多有 \((m^h-1)/(m-1)\) 个结点。)
对于编号为 \(i\) 的结点,若存在,其双亲结点的编号为:\(\left \lfloor i/2 \right \rfloor\),左孩子编号为:\(2i\),右孩子编号为:\(2i+1\)。
3.2. 完全二叉树
设一个高度为 \(h\)、有 \(n\) 个结点的二叉树,当且仅当每个结点都与高度为 \(h\) 的满二叉树中编号 \(1 \sim n\) 的结点一一对应时,称为完全二叉树。
- 若 \(i<[n/2]\),则结点 \(i\) 为分支结点,否则为叶子结点。
- 叶子结点只可能出现在层次最大的两层上出现。对于最大层次的叶子结点,都依次排在最左边的位置上。
- 度为 \(1\) 的结点若存在,则可能有一个,且是编号最大的分支结点,并孩子结点一定是左结点。
3.3. 二叉排序树
一颗二叉树,若树非空,则有如下性质:
对任意结点若存在左子树或右子树,则其左子树上所有结点的关键字均小于该结点。右子树上所有结点的关键字均大于该结点。
3.4. 平衡二叉树
树上任意结点的左子树和右子树的深度之差不超过 \(1\)。
4. 二叉树的性质
- 非空二叉树上的叶子结点数等于度为 \(2\) 的结点数加 \(1\),即 \(n_0=n_2+1\)
- 非空二叉树上第 \(k\) 层上至多有 \(2^{k-1}\) 个结点(\(k \geq 1\))。
- 高度为 \(h\) 的二叉树至多有 \(2^h-1\) 个结点(\(h \geq 1\))。
- 对完全二叉树按从上到下、从左到右的顺序依次编号 \(1,2,...,n\),则有以下关系:
- 当 \(i>1\) 时,结点 \(i\) 的双亲结点编号为:\(\left \lfloor i/2 \right \rfloor\)。即当 \(i\) 为偶数时,其双亲结点的编号为 \(i/2\),它是双亲结点的左孩子 0;当 \(i\) 为奇数时,其双亲结点的编号的为 \((i-1)/2\),它是双亲结点的右孩子。
- 当 \(2i \leq n\) 时,结点 \(i\) 的左孩子编号为 \(2i\),否则无左孩子。
- 当 \(2i+1 \leq n\) 时,结点 \(i\) 的右孩子编号为 \(2i+1\),否则无右孩子。
- 结点 \(i\) 所在的层次为 \(\left \lfloor log_2i \right \rfloor+1\)。
- 具有 \(n\) 个(\(n>0\))结点的完全二叉树的高度为 \(\left \lfloor log_2n+1 \right \rfloor\) 或 \(\left \lceil log_2(n+1) \right \rceil\)。
本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/16708851.html