一、二叉树的定义
二叉树是一种特殊的树形结构,其特点是每个结点至多只有两颗子树,并且二叉树的子树有左右之分,次序不能颠倒。
二叉树是n(n≥0)个结点的有限集合:其或者为空二叉树(n=0),或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
二叉树是有序树,若将其左右子树颠倒,则成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分是左子树还是右子树。其有五种基本形态如下:
二叉树与度为2的有序树的区别:
(1)度为2的树至少有3个结点(根结点),而二叉树可以为空;
(2)度为2的有序树的孩子结点的左右次序是相对于另一孩子结点而言的,若某个结点只有一个孩子结点,则这个孩子结点无需分左右。但二叉树左右孩子是确定的。
二、几个特殊的二叉树
1.满二叉树
一棵高度为h,且含有个结点的二叉树称为满二叉树,即树中的每层都含最多结点。直接上图来的更直接一些:
满二叉树的叶子结点都集中在二叉树的最下一层,并且除叶子结点之外的每个结点度数均为2。自上而下,自左至右对满二叉树编号,对于编号为i的结点,若有双亲,其双亲为,若有左孩子,则左孩子为2i;若有右孩子,则右孩子为2i+1。
2.完全二叉树
设一个高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。如图所示:
其具有如下特点:
(1)若i≤,则结点i为分支结点,否则为叶子结点;
(2)叶子结点只可能在层次最大的两层上出现。对于最大层次中的叶子结点,都依次排列在该层最左边的位置上;
(3)若有度为1的结点,则只可能有一个,且该结点只有左孩子而无右孩子;
(4)按层序编号后,一旦出现某结点(编号为i)为叶子结点或只有左孩子,则编号大于i的结点均为叶子结点;
(5)若n为奇数,则每个分支节点都有左孩子和右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点左孩子右孩子都有。
3.二叉排序树
一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:左子树上所有结点的关键字均小于根结点的关键字;右子树上的所有结点的关键字均大于根结点的关键字。左子树和右子树又各是一棵二叉排序树。
4.平衡二叉树
树上任一结点的左子树和右子树的深度之差不超过1。
5.红黑树
红黑树是一种自平衡二叉查找树。
三、二叉树的性质
1.非空二叉树上的叶子结点数等于度为2的结点数加1,即;
证明:设度为0、1和2的结点个数分别为,
,
,结点总数
。二叉树中的分支数除根结点外,其余结点都有一个分支进入,设B为分支总数,则n=B+1。由于这些分支是由度为1或2的结点射出的,所以又有
。所以我们得到
,则
。
2.非空二叉树上第k层上至多有个结点(k≥1);
3.高度为h的二叉树至多有个结点(h≥1);
4.对完全二叉树按从上到下、从左到右的顺序依次编程1,2,…,n,则有以下关系:
(1)当i>1时,结点i的双亲结点编号为,即当i为偶数时,其双亲结点的编号为i/2,它是双亲结点的左孩子;当i为奇数时,其双亲结点的编号为(i-1)/2,它是双亲结点的右孩子。
(2)当2i≤n时,结点i的左孩子编号为2i,否则无左孩子;
(3)当2i+1≤n时,结点i的右孩子编号为2i+1,否则无右孩子;
(4)结点i所在层次(深度)为。
5.具有n个(n>0)结点的完全二叉树的高度为或
。