二叉树
二叉树的定义 :二叉树是由n个节点的有限集合,该集合可以为空集,或者由一个根界定和两棵互不相交的,分别称为根节点的左子树和右子树的二叉树组成。我就可以把他理解为每一个点最多可以连三个点,但根节点最多只能连两个点。
二叉树一般是具有五种形态:空二叉树,只有一个根结点,根结点只有左子树,根结点只有右子树,根结点有左子树又有右子树。但是这个不重要。
我们要清楚的了解什么是完全二叉树和满二叉树
满二叉树
可以就是说所有的分支结点都存在左子树和右子树,并且所有的叶子都在同一层上,如图所示
完全二叉树
就是从上到下 从左到右来看这个二叉树是没有缺结点。 官方的话就是对一颗具有n个结点的二叉树按层序编号,如果编号为i的结点于同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同,则这个二叉树被称为完全二叉树。
完全二叉树的特点
- 叶子结点只可以出翔在最下的两层
- 最下层的叶子结点一定是集中在左部的连续位置
- 倒数二层,若有叶子结点,一定都在右边的连续位置
- 如果结点度为1,则改结点只有左孩子,即不存在只有右子树的情况
- 同样结点数的二叉树,完全二叉树的深度最小
二叉树的性质
- 在二叉树的第i层上最多有2^(i-1)个结点
- 深度为k的二叉树最多有2^(k-1)个结点
- 对任何一个二叉树,如果它的叶子结点数为n,度为2的结点数为m,则 n = m+1。
- 具有n个结点的完全二叉树深度为( ( log2 (n+1) )。
二叉树的存储结构
顺序表结构
我们知道顺序表结构的本质上是数组,也就是我们把结点按顺序的存储在这个数组中。
但是这种存储结构显而易见的是最适合满二叉树和完全二叉树,我们按照数组的下标和二叉树的下标一一对应存储数据。若是不是这种特殊的二叉树,要是处于极端情况下就会导致大量的空间无法被利用。
链表结构
二叉树不像单链表一样只有一个引用,我们根据二叉树的特点,每一个结点最多有两个结点,我们一般称为左孩子和右孩子,所以就使用了两个引用。我们用链表的形式来存储数据的就不会存在被申请存在而未被使用的数据空间。