树的高度:
树中节点的最大层次树称为树的高度或深度
节点的层次从上往下加1,节点高度的计算从下往上,且都是从1开始递加
1.树的存储方式
1)多重链接
节点结构为:除了存储节点的值的值域外,还有存储所有的儿子地址的链域(可以存在在数组中)
(特点:元数越大,链域的利用率越低,空间耗费大,找儿子容易,找父亲难)
2)儿子兄弟链
节点结构为三部分:节点数值,第一个儿子链和右第一个兄弟链
(特点:空间利用率提高,找儿子兄弟容易,找父亲难)
3)父亲链域
节点结构:节点数值和该节点的父节点在数组中对应的下标
(特点:由儿子找到父亲容易,由父亲找到儿子难)
2.二叉树
二叉树是:二元位置树,有5种形态:空树;一个根节点的树;一个根节点加一个左儿子节点;一个根节点加一个右儿子节点;一个根节点加左右儿子节点
3.满二叉树
就是每个除叶子节点外的节点都含有俩个左右儿子节点的树。
4.完全二叉树
在满二叉树中,按层从上到下,每层从左至右编号从1开始,连续取n个节点所构成的树。
完全二叉树一定是一颗满二叉树从最下层最右边依次去掉节点后得到的。所以:完全二叉树是满二叉树的一部分,满二叉树是完全二叉树的特例
5.非空二叉树的性质
1)非空二叉树中,第i层上节点的个数为:ni <= 2i-1(数学归纳法证明:第一层1个,第二层2个,第三层4个.....第n层 2i-1个)这个性质是强调每一层节点数量和层次的关系
2)高度为k(最高层次为K)的二叉树中,节点总数MK <= 2k-1 。 可以得到最多的节点数 强调树节点总数和层次的关系
(证明:
Mk=1+2+4+8+....+2k-1
2Mk = 2+4+8+16+....+(2k-1)*2
上式子相减即得k层高度的树的节点总数最多为:Mk = 2k-1;
)
3)n个节点的二叉树的高h满足:h>=[log2n]+1 。可以得到最小的高度 强调树节点总数和层次的关系
6.完全二叉树节点编号的性质
编号为i(1<=i<=n其中n为节点总数),其父亲和左,右儿子的编号满足下列条件:
1)若i=1,则i无父节点;否则(i>1)其父节点的编号为i/2;
因为是完全二叉树,所以在一个节点的左儿子节点存在的情况下,左儿子的编号是该节点的2倍,右儿子存在的情况下,右儿子编号为该编号的2倍+1;
假设编号为 i的节点有左儿子,则左儿子编号为2i,如果2i>n说明该节点的左儿子编号大于了节点的总数,说明这种节点是不存在的即:
2)2i>n,则无左儿子(同样根据完全二叉树是满二叉树从右下脚依次去掉节点的特点可得同样没有右节点)
3)2i+1>n,则无右儿子(左有无不能确定)
7.满二叉树节点编号的性质
1)树的最左边一条分枝上,节点的编号为1,2,4,8...即编号为20,21,22,23....2k-1的形式
2)树的最右边的一条分枝上,节点编号为1,3,5,7,15...即编号为21-1,22-1,23-1....2k-1的形式
综上:第i层的编号依次为2i-1,2i-1+1....2i-1.