数据结构 14-二叉树的概念与性质

数据结构 14-二叉树的概念与性质_第1张图片

目  录

1. 二叉树的定义

1.1 有序树和无序树之分

1.2 二叉树的定义

2. 二叉树的性质

2.1 非空二叉树上叶节点数等于双分支节点数加 1

2.2 非空二叉树上第 i 层上至多有 2^{i-1} 个节点,这里应有 i≥ 1 

2.3 高度为 h 的二叉树至多有 2^{h}-1 个节点(h>1) 

3. 特殊的二叉树

3.1 满二叉树

3.1.1 满二叉树定义

3.1.2 满二叉树特点

3.2 完全二叉树

3.2.1 完全二叉树定义

3.2.2 完全二叉树特点

3.2.3 完全二叉树性质

数据结构 14-二叉树的概念与性质_第2张图片

前面说了很多树的性质,就是为了引出我们最常见的一种树---二叉树。

1. 二叉树的定义

1.1 有序树和无序树之分

        前面说了树,一个节点可能有多个分支节点,这些分支节点之间可以是有序的,也可以是无序的。分支节点有序的树,即有序树。

        有序树:从左到右每一个子树都是有次序的。

        无序树:从左到右每一个子树都是无次序的。这种树称为无序树,也称为自由树

1.2 二叉树的定义

        二叉树,即度为 2 的树,它的每个节点的度都不大于 2,在一般使用过程中,我们认为它是有序的树!它的两个分支,分别是左分支、右分支,是有顺序的。

2. 二叉树的性质

2.1 非空二叉树上叶节点数等于双分支节点数加 1

        二叉树中可以将分支节点分为:度数为 0 的叶子节点数 a,度数为 1 的单节点数 b,度数为 2 的双分支节点数 c,树中的节点总数 n = a+b+c。

        之前树的性质 1:树中的节点数等于所有节点的度数加 1,二叉树也是一种树,也满足这一条件。而一个节点的度就是它有几个分支。根据这一点,可以得到 n=b+2*c+1。

        即 a+b+c=b+2*c+1     ===>  a=c+1

        从而得到:非空二叉树上叶节点数等于双分支节点数加 1

2.2 非空二叉树上第 i 层上至多有 2^{i-1}个节点,这里应有 i≥ 1

        根据树的性质 2:度为 m 的树中第 i 层 ( i≥1 ) 上至多有m^{i-1}个节点。

        二叉树的度为 2,那么非空二叉树上第 i 层上至多有 2^{i-1}个节点,这里应有 i≥ 1 

2.3 高度为 h 的二叉树至多有 2^{h}-1 个节点(h>1)

        根据树的性质 3:h>1 时候,高度为 h的 m 次树至多有 \frac{​{m^{h}}-1}{m-1}个节点。

        二叉树的度为 2,那么 高度为 h 的二叉树至多有 2^{h}-1 个节点(h>1) 

3. 特殊的二叉树

3.1 满二叉树

3.1.1 满二叉树定义

        在一棵二叉树中,如果所有分支节点都有左 孩子节点和右孩子节点,并且叶节点都集中 在二叉树的最下一层,这样的二叉树称为满二叉树。如下图,就是一个高度为 3 的满二叉树。

数据结构 14-二叉树的概念与性质_第3张图片

3.1.2 满二叉树特点

  1. 叶子节点都在最下一层;高度为 h 的二叉树叶子节点个数为 2^{h-1}
  2. 只有度为 0 和度为 2 的节点;高度为 h 的二叉树节点总数是 2^{h}-1
  3. 如果对满二叉树编写序号,从上而下,从左而右,序号从 1 开始,那么如果满二叉树的个数是 n,那么序号小于\left \lfloor n/2 \right \rfloor 的节点为分支节点, 否则为叶子节点。

3.2 完全二叉树

3.2.1 完全二叉树定义

        如果二叉树中最多只有最下面两层的节点的度数可以小于2,并且最下面一层的叶节点都依次排列在该层最左边的位置上,则这样的二 叉树称为完全二叉树。

        如下图,就是一个高度为 3 的完全二叉树。可以看出,完全二叉树是去接近满二叉树的一个中间状态

数据结构 14-二叉树的概念与性质_第4张图片

3.2.2 完全二叉树特点

  1. 叶子结点只能在层次最大的两层上出现:
  2. 最大层次上的叶子结点,都依次排列在 该层最左边的位置上
  3. 如果有度为 1 的节点,只能有一个,且 该节点只有左孩子,没有右孩子
  4. 按层编号后,一旦出现某节点(编号为i) 为叶子结点或只有左孩子,则编号大于i 的节点,均为叶子节点
  5. 完全二叉树中一旦 n 确定,其树形就确定了,可以计算出高度 h 以及叶子节点数

3.2.3 完全二叉树性质

        对完全二叉树中编号为 i 的节点(1≤i≤n,n≥1,n 为节点数),会发现有以下数学特性

  1. 若 n 为奇数,则每个分支节点都既有左孩子节点, 也有右孩子节点;
  2. 若 n 为偶数,则编号最大的分支 节点只有左孩子节点,没有右孩子节点,其余分支节点都有左、右孩子节点。
  3. 编号为 i 的节点有左孩子节点,则左孩子节点的编号为 2i;若编号为 i 的节点有右孩子节 点,则右孩子节点的编号为 (2i+1)。也可以根据以上特性,从当前孩子节点反推父母节点。

你可能感兴趣的:(#,Python,数据结构,数据结构,python)