完全二叉树的性质
1.给定完全二叉树的总结点数,求树高
k层完全二叉树的各层结点数:
第1层——1=1
第2层——2^1=2
第3层——2^2=4
......
第k-1层——2^(k-2)
第k层——1 ~ 2^(k-1)
所以k层完全二叉树的总结点数最少是[2^0+2^1+......+2^(k-2)]+1=[2^(k-1)-1]+1=2^(k-1)
所以k层完全二叉树的总结点数最多是2^0+2^1+......+2^(k-1)=[2^(k-1)-1]+1=2^k-1
而
2^(k-1)以2为底向下取对数 等于 k-1,k-1+1=k这才是完全二叉树的层数
2^k-1以2为底向下取对数 等于 k-1,k-1+1=k这才是完全二叉树的层数
所以,如果给定一棵完全二叉树的总结点数n,通过表达式“对n以2为底取对数并向下取整+1”就可以得到它的高度。
2.
对一棵结点总数是n的完全二叉树从上至下,从左至右进行1-n编号
根结点的下标一定要是1不是0,才能保证编号是2i和2i+1的结点是编号为i的结点的左孩子和右孩子
如何判断有左孩子:
2i > n,说明编号是i的结点没有左孩子
2i=n 或者 2i<n,说明编号是i的孩子有左孩子
如果编号是i的结点有右孩子,那么这个结点的左孩子编号是2i+1
如何判断有右孩子:
2i+1 > n,说明编号是i的结点没有右孩子
2i+1=n 或者 2i+1<n,说明编号是i的孩子有右孩子
反之,编号是i的结点的父结点编号是(i/2)结果向下取整
说明:
如果i是整型数,那么
(i/2)结果向下取整 = i/2
如果i是浮点型如float或者double,那么
(i/2)结果向下取整 = i/2的整数部分
这个性质用于把一棵完全二叉树存放在一个一维数组中,这样可以通过对数组元素下标的操作来操作这棵树