一、二叉树的定义
二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
如上图所示,左图为二叉树。右图不是二叉树,因为其D结点有三个子树,不满足二叉树的定义,所以其不是二叉树。
二、二叉树的特点
1.二叉树的每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。没有子树或者有一棵子树都是可以的。上图中右图中的树的结点D为3,所以其不是二叉树。左图中的树的结点度数最大为2,叶结点度为0。
2.左子树和右子树是有顺序的,次序不能颠倒。
3.即使树中某结点只有一棵子树,也要区分是左子树和右子树。因为其左子树和右子树是不同的两棵树。
三、二叉树的不同形态
一般情况下,二叉树有五种基本形态:
1.空二叉树。即没有结点的树也叫二叉树。
2.只有一个根结点。一般情况下,只有一个结点的树我们通常认为其是根结点,而非叶结点。
3.根结点只有左子树,通常称其为左斜树。
4.根结点只有右子树,通常称其为右斜树。
5.根结点既有左子树又有右子树。常见的二叉树即是这样,左右子树都有。
*斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。其实,这种斜树与线性表的结构是一样的,因此,线性表结构实际上可以理解为是树的一种极其特殊的表现形式。
*满二叉树与完全二叉树
满二叉树:在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,即称这样的树为满二叉树。如下图所示,即是满二叉树
由图可得,满二叉树的特点有:
1.满二叉树的叶子结点只能出现在最下一层,出现在其他层就不可能达成平衡。
2.满二叉树的非叶子结点的度数为2,并且一定为2。
3.在同样深度的二叉树中,满二叉树的结点个数最多,叶子结点个数也最多。
完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。如下图所示:
按层序编号,即对二叉树从上到下,从左到右依次编号。如果编号为i的点与同样深度的满二叉树中编号为i的结点在二叉树中的位置相同,则是完全二叉树,否则非完全二叉树。上图所示的二叉树为完全二叉树,下图所示的二叉树不是完全二叉树。
上图所示的二叉树为普通二叉树,非完全二叉树,因为其编号为10的结点与满二叉树中编号为10的结点的位置不一样。由此,我们可以概括得出完全二叉树的特点:
1.完全二叉树的叶子结点只能出现在最下面两层。
2.最下一层的叶子结点一定集中在最左且连续的位置。
3.倒数第二层,如果有叶子结点,则一定都在最右且连续的位置。
4.如果某结点的度为1,则该结点只有左孩子,不存在度为1且是右孩子的情况。
5.同样结点数的二叉树,完全二叉树的深度最小。
四、二叉树的性质
性质1:在二叉树的第i层上至多有个结点(i≥1)。
性质2:深度为k的二叉树至多有个结点(k≥1)。
性质3:对任何一棵二叉树T,如果其终端结点数为,度为2的结点数为
,则有
。
终端结点数其实就是叶子结点数,而一棵二叉树除了叶子结点,剩下的就是度为1或度为2的结点了,我们设为度是1的结点数。则树T的结点总数
。如果换个角度思考的话,以树的分支线总数来列式子,即树的分支总数等于树的结点数减一。由于根结点只有出去的分支,却没有进来的分支,如果结点的度为2,则说明有两个出去的分支,而度为1的结点只有一个出去的分支。所以,树的分支总数
,将此式与
相结合再经过推导便可得
。
性质4:具有n个结点的完全二叉树的深度为(
表示不大于x的最大整数)。
由满二叉树的定义可知,深度为k的满二叉树的结点数n一定是,这是最多的结点个数。那么对于
倒推可得到
。比如结点数为15 的满二叉树,其度为4。
性质5:如果对一棵有n个结点的完全二叉树(其深度为)的结点按层序编号(从第1层到第
层,每层从左到右),对任一结点i(1≤i≤n)有:(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点
;(2)如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i;(3)如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。
以本文开始的二叉树为例,此五个性质完全符合。
以上即是与二叉树相关的概念~