数据结构—基础知识(十):树和二叉树(b)
二叉树的定义
二叉树( Binary Tree)是n(n≥0)个结点所构成的集合,它或为空树(n=0);或为非空树,对于非空树T:
- 有且仅有一个称之为根的结点;
- 根结点以外的其余结点分为两个互不相交的子集T1和 T2,分别称为T的左子树和右子树,且T1和T2本身又都是二叉树。
二叉树与树一样具有递归性质,二叉树与树的区别主主要有以下两点:
- 二叉树每个结点至多只有两棵子树(即二叉树中中不存在度大于2的结点);
- 二叉树的子树有左右之分,其次序不能任意颠倒到。
二叉树的递归定义表明二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。由于这两棵子树也是二叉树,则由二叉树的定义,它们也可以是空树。由此,二叉树可以有5种基本形态,如下图所示。
注:有关树的术语是都适用于二叉树。
二叉树的性质
二叉树具有以下重要特性:
性质1 在二叉树的第i层上至多有2^(i-1)个结点(i≥1)。
性质2 深度为k的二叉树至多有(2^k)-1个结点(k≥1)。
性质3 对任何一棵二叉树T,如果其终端节点数为n0,度为2的结点数为n2,则n0=n2+1;结点总数为n=n0+n1+n2。
再看二叉树中的分支数。除根结点外,其余一个结点都有一个分支进入,设B为分支总数,则n=B+1。由于这些分支是由度为1或2的结点射出的,所以又有B=n1+2·n2。于是得n=n1+2·n2+1。
满二叉树和完全二叉树
满二叉树:深度为k且含有(2^k)-1个结点的二叉树。
- 满二叉树的特点是:每一层上的结点数都是最大结点数,即每一层i的结点数都具有最大值2。
- 可以对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,自左至右。由此可引出完全二叉树的定义。
完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。
完全二叉树的特点是:
- 叶子结点只可能在层次最大的两层上出现;
- 对任一结点,若其右分支下的子孙的最大层次为l,则其左分支下的子孙的最大层次必为l或I+1。
性质4 具有n个结点的完全二叉树的深度为log(2)(n)(向下取整)+1
性质5 如果对一棵有n个结点的完全二叉树(其深度为log(2)(n)(向下取整)+1)的结点按层序编号(从第1层到第log(2)(n)(向下取整)+1层,每层从左到右),则对任一结点i(1≤i≤n),有:
- 如果i=1,则结点i是二叉树的根,无双亲;如果i>1,其双亲PARENT(i)是结点i/2(向下取整)。
- 如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子LCHILD(i)是结点2i。
- 如果2i+1>n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i+1。