1:基本概念
上图先:
如图,用一个圆圈表示一个结点,圆圈内的符号表示结点的数据信息,结点间的关系通过连线表示。连线的上方结点是下方结点的直接前趋,下方结点是上方结点的直接后继。树的某个结点的子树个数称为该结点的度。如图结点1的度数为2,结点6、7的度数为0.这种度数为0的结点称为终端结点(树叶或叶子)。而树的度数是指该树中所有结点的度数的最大值。
在一棵树中,每个结点的直接后继被称为该结点的子结点或子女结点。该结点被称为子结点的双亲结点。同一双亲的子结点互为兄弟结点。树中每个结点都处于一定的层次上,树中结点的最大层次称为树的高度。
二叉树也称二分树或二元树,是一种特殊的树形结构。在二叉树中,每个节点最多有两个子结点。子结点之间有左右之分。二叉树是n(n>-1)个结点的有限集合。当n为0时,称为空二叉树;当n>0时,有且仅有一个结点为二叉树的跟,其余不相交的结点分为左子树和右子树。并且每颗子树又是一颗二叉树。
如图所示,二叉树的五种形态。
2:主要特点
1:二叉树中,第i层的结点数最多为2^i-1个结点(i>0)
当i=1时,只有一个根结点。显然,2^i-1=2^0=1。如果0<j<i+1(j是正整数),第j层上至多有2^j-1个结点。
2:深度为K的二叉树结点总数最多为2^k -1(k>0)
由1得,深度为K的二叉树的最大结点数为:
3:任何一颗二叉树BT,若子节点(深度为0)数为 ,度为2的结点数为
,则
.
如果一颗深度为K的二叉树拥有2^k -1个结点,则此二叉树为满二叉树;如果一颗满二叉树,从第一层的根结点开始,自上而下,从左到右的对结点连续编号,其每一个结点都与深度为K的满二叉树中编号从1-n的结点一一对应,则是完全二叉树。
如图:(a)是满二叉树,(b)是完全二叉树。
完全二叉树的特点:深度为k的完全二叉树,其前k-1层是一颗满二叉树,最后第K层结点都尽量排在靠左的位置上。满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
4:具有n个结点的完全二叉树的深度为 +1 ,其中
代表不大于
的最大整数。
假设深度为k,根据2和完全二叉树的定义有:
2^(k-1)-1 <n <2^k 或者2^(k-1)≤n<2^k
5:一颗有n个结点的完全二叉树的结点按顺序编号,则对任意一个结点(1≤i≤n),有以下几个特点:
1):如果i>1 则i的双亲结点是结点的1/2;弱i=1,则i是根结点。
2):弱2i>n,则i没有左子结点也没有右子结点。
3):弱2i+1>n,则结点i没有右子结点。
3:存储
二叉树通常采用顺序存储结构和链式存储
1:顺序存储
用一组连续的存储单元存储二叉树的数据,按满二叉树或者完全二叉树的结点顺序编号依次将二叉树中数据元素存放在连续的地址空间中,
这种存储方式适用于完全二叉树以及满二叉树,特点是空间利用率高。若二叉树是一般的二叉树,则需要把空缺的位置用特定的符号填补,如下图:
2:链式存储
链式是二叉树常用的存储结构。二叉树的每一个结点最多可以有左、右两颗子结点,表示二叉树的链表中的结点由数据域、左指针、右指针组成。如图:
其中,lchild和rchild分别是该结点的左子结点和右子结点的指针,data是数据内容。一个二叉链表也有头指针,如果二叉树为空,则头指针指向null;若结点的没有某个子结点,对应的指针也为空,在一个有n个结点的二叉树中,应该有2n个指针。如图:
这种存储结构有利于寻找子结点,不利于寻找父结点,如果需要频繁的寻找父结点,就需要在每个结点中增加一个指向父结点的指针,组成三叉链表
本文转自:http://www.cnblogs.com/YamatAmain/archive/2013/05/22/3093867.html