二叉树
定义
二叉树是n(n≥0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。
特点:
每个节点最多有两棵子树;
二叉树是有序的,其次序不能任意颠倒
特殊二叉树
斜树
1.所有节点都只有左子树的二叉树称为左斜树;
2.所有节点都只有右子树的二叉树称为右斜树;
3.左斜树和右斜树统称为斜树。
4.在斜树中,每一层只有一个节点;
5.斜树的节点个数与其深度相同。
满二叉树
介绍:
在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子都在同一层上。
特点:
1.叶子只能出现在最下一层。
2.只有度为0和度为2的节点
3.满二叉树在同样深度的二叉树中节点个数最多。
4.满二叉树在同样深度的二叉树中叶子节点个数最多。
完全二叉树
定义:
对一棵具有n个节点的二叉树按层序编号,如果编号为i(1≤i≤n)的节点与同样深度的满二叉树中编号为i的节点在二叉树中的位置完全相同。
简单来讲就是k层的完全二叉树前k-1层和k-1层的满二叉树一样,在第k层自左端数起,叶子节点都是连续的。
或者说在满二叉树中,从最后一个节点开始,连续去掉任意个节点,即是一棵完全二叉树。
特点:
1.叶子节点只能出现在最下两层,且最下层的叶子节点都集中在二叉树的左部。
2.完全二叉树中如果有度为1的节点,只可能有一个,且该节点只有左孩子。
3.深度为k的完全二叉树在k-1层上一定是满二叉树。
基本性质
1.二叉树的第 i 层上最多有2i-1个节点(i≥1)
2.一棵深度为k的二叉树中,最多有2k-1个节点,最少有k个节点。
3.深度为k且具有2k-1个节点的二叉树一定是满二叉树
4.深度为k且具有k个节点的二叉树不一定是斜树。(可能左右交错)
5.在一棵二叉树中,如果叶子节点数为n0,度为2的节点数为n2,则有: n0=n2+1。 (简单证明如下:
1.二叉树总节点数 =度为0的节点数+度为1的节点数+度为2的节点数
2.除根节点之外每个节点均有一个入度,而入度来自于度数不为零的节点的贡献(总节点数-1 == 度为1的节点数+2度为2的节点数)
3.1和2联立消去度数为1的节点数以及总节点数即可
6.具有n个节点的完全二叉树的深度为[log2n]+1 ([ ]表示向下取整)
7.若将n个节点的完全二叉树从1开始层序标号,则有如下性质:
1.根节点标号为1.
2.节点 i(i>1) 的双亲节点是i/2,根节点无双亲节点
3.节点 i 的左儿子标号为 2i,右儿子为 2*i+1 ,若左(右)儿子标号超过n,则无左(右)儿子
二叉树的顺序存储结构
二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置(下标)应能体现节点之间的逻辑关系——父子关系。
普通二叉树需按照完全二叉树的编号方式编号,然后以完全二叉树的形式存储到一维数组中,造成很多浪费,故二叉树的顺序存储结构一般仅存储完全二叉树.