证明:在任一含n个元素的堆中,至多有ceiling(n/(2^(h+1)))个高度为h的节点。
分析:刚开始分析这道题,犯了结点高度h的错误。
具体问题如下:
对于满二叉树,上述命题成立。但如果是非完全二叉树,命题不成立。举例说明:假设有10个元素,那么高度为1的节点也就是第3层的节点,一共有4个,而不是ceiling(10/2^2))=3个,为什么呢?
经过思考以后,对于结点高度的定义,是按照当前所在结点为根结点的子树决定的,而不是由整棵树决定,也就是所有的叶子结点,它的高度全部为0。还是假设有10个元素,它的高度如下图所示:
命题理解正确了,开始用数学归纳法证明吧!
证明:
(1)对于h=0, 即叶子结点的个数,由6.1-7习题可知,叶子结点的个数最多为ceiling(n/2)=ceiling(n/2^(h+1)),即初始化成立。
(2)假设h=x成立,即高度为x的结点最多有ceiling(n/2^(x+1)),
那么对于高度为h=x+1的结点应该为高度为x的父结点,所以高度为x+1的结点个数最多为ceiling(n/2^(x+1))/2=ceiling(n/2^(x+2))=ceiling(n/2^(h+1)).
命题得证。