完全二叉树初见:部分性质的证明

坏了坏了,被二叉树俘虏了。数据结构真的是很奥妙啊,对于一些比较难的性质我也想挑战一下证明,脑力耗尽了........

1.对于任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1.


这个结论的证明真的有一种开拓思路的感觉,让人眼前一亮。

首先从结点的角度看:

可以发现所有的结点可以按照孩子的数量分为三种,n0,n1,n2。所有的结点的总数为n0+n1+n2。

然后从边的角度考虑:

        发现所有的结点(除了根结点)必然有一根链接双亲的线,那么如果有N个结点,那么就有N-1条线,观察出线的数量是N-1。而双亲链接的孩子数量,就是线的数量(n1+2*n2)。

N-1=n1+2*n2=n0+n1+n2

两侧相消,可知n0=n2+1。

2.具有n个结点的完全二叉树的深度为[log2n]+1。

对于任意的n,2^(k-1)-1<=n<2^k-1,k为此时树的深度。显然可知k-1<=log2n<k,高斯函数向下取整后加1即产生k。


3.如果对于一颗有n个结点的完全二叉树(深度为[log2n]+1)的结点按层序编号,则对任一结点i(1<=i<=n),有:
(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点[i/2]
(2)如果2i>n,则结点i为叶子节点并且在最底层,无左孩子;否则,其左孩子是节点2i。
(3)如果2i + 1 > n,则结点i无右孩子;否则,其右孩子是节点2i+1.

这是王越老师ppt上的内容,翻译成人类的语言就是:对于一个结点i,它的双亲是结点[i/2],而它的左孩子是2i,右孩子是2i+1(前提是不能超过n)。

关于这题,我认为用数学归纳法是可以证明的。(不太懂数学,这是数学归纳法吗?)

对于一个结点k而言,它的下一个结点为k+1,而这个结点对于结点k而言两种情况:

第一种情况:k+1位于k的右侧

        假设性质1,2,3是正确的,那么k结点的左右子树为2k,2k+1。那么k+1结点的左右子树分别为2k+2,2k+3。

如图所示,

那么发现2*(k+1)=2k+2,2*(k+1)+1=2k+3,[2k+2/2]=k+1,[2k+3/2]=k+1,即对于k+1结点,性质1,2,3均成立。

第二种情况:k+1位于k的下一行的开头

        同情况1,先绘制出k结点与其左右孩子的图像

如图所示,

但是此时不用做任何假设,因为直接观察就可得到对于结点k而言,性质1,2,3均成立。

        综合上述两种情况,对于k结点,无论k+1的位置落再k的右侧还是左下,结点总是符合这三个性质的!k结点可推广至任意符合条件的结点,由此证毕,以后哪怕记不住结论也可以现场再推一遍了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值