孩子兄弟表示法模型:
可比较(双亲孩子表示法模型结构)
数据域data |
孩子结点指针 firstchild | 兄弟结点指针 rightsib |
firstchild :指向该结点的第一个孩子
rightsib :指向该结点的右兄弟
特点:
?能够表示任意的树形结构
?每个结点中有且仅有三个指针域(如上)
?每个结点的结构简单,只有孩子结点指针和兄弟结点指针形成树杈
该表示法的优点:可以把一棵复杂的树变成一个二叉树。
二叉树定义:
是由n (n>=0)个结点的有限集合,该集合或者为空集,或者是由一个根结点和两棵互不相交的分别称为根结点的左子树和右子树的二叉树组成。
二叉树最多有两个孩子的树:左子树、右子树
满二叉树:
如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树
特点:
?叶子只能出现在最下一层,出现在其它层就不可能达到平衡
?非叶子结点的度一定是2
?在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多
图:满二叉树
完全二叉树:
对一棵具有N个结点的二叉树按层编号,如果编号为 I (0< i < N)的结点与同样深度的满二叉树中的编号 I 结点在二叉树中的位置完全相同,则这课二叉树称为完全二叉树
图:完全二叉树 举例
注:观察每个结点按照满二叉树的结构逐层顺序编号,没出现空挡,则是完全二叉树。
一些特点:
?叶子结点只能出现在最下两层
?最下层的叶子一定集中在左部连续位置
?倒数第二层,若有叶子结点,一定都在右部连续的位置
?如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况
?同样结点数的二叉树,完全二叉树的深度最小
斜树:
所有的结点都只有左子树的二叉树叫左斜树,所有结点都是只有右子树的二叉树叫右斜树。树的的一种特殊的表现形式
二叉树的性质:
有助于设计更为巧妙的算法
性质1:
在二叉树的第 i 层最多有个结点(i >1);
性质2:
深度为K的二叉树最多有个结点(K >= 0);
性质3:
对任何一棵二叉树,如果其叶结点有 N0 个,度为2的结点有 N2 个,则 N0 = N2 +1.
注:根据边与结点的关系
N0 :度为0 的结点--0条边
N1 :度为1的结点--一条边
N2 :度为2的结点--两条边
二叉树中度最大为2,则二叉树中总边数 N 为 0*N0 + 1*N1 +2*N2
即 总边数 N = 1*N1 +2*N2
又只有根结点没有输入边,其他结点都有一个输入边,则总边数 N 又可以表示为 (N0+N1+N2) - 1
所以 1*N1 +2*N2 = N = (N0+N1+N2) - 1
化简得 N0 = N2 + 1
由此性质可以快速了解到 度不同的结点之间的关系。
性质4:
具有 n 个结点的完全二叉树的高度为最大整数
完全二叉树有可能为满二叉树,也可能不满。
则结点数范围是 n > ; 同时 n <=
所以
两边同时加 1 得:(可以联想到二叉树的情况)
同时取对数得:
又K为整数,所以
性质5:
一棵有n个结点的二叉树,按层次对结点进行编号(从左到右,从上到下),
则任意结点 i 有:
如果 i = 1; 则结点i是二叉树的根
如果 i > 1;则其双亲结点为 [i/2] ; [...]:表示不大于此数的最大整数
如果2i <= n; 则结点i的左孩子为2i;
如果2i > n; 则结点i无左孩子;
如果2i+1 <= n; 则结点i的右孩子为2i+1;
如果2i > n; 则结点i无右孩子;
可通过下图验证性质5