多叉树子节点有多个父节点_堆排序算法C++实现(以及子节点下标是父节点两倍的证明)...

常见二叉树区别:

满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。


满二叉树的层k与结点个数的关系:

//第一层2^0
//第二层2^1
//第三层2^2
//第k层2^(k-1)

根据等比数列求和公式求得前k层所有节点的个数sum

sum=1+2^1+2^2+2^3+...+2^(k-1)=2^k-1

假设用数组存储满二叉树,从下标为0的位值开始存第一个根节点然后依次是它的左右子树,如此循环,那么第k层的最后一个节点下标为:2^k-2

ba50746d1fe588a3baddb063c748702e.png

公式描述:

公式中a1为首项,an为数列第n项,q为等比数列公比,Sn为前n项和

//总结一下:共2^k-1个节点,每层有2^(k-1)个节点

上面说了满二叉树现在来说完全二叉树

完全二叉树子节点下标与父结点下标关系证明:

假设父节点为第K层的第m个节点,则其子节点为k+1层的第2m-1个 和 第2*m个(自己可以画图试试

//证明也很简单:
//设父节点为F,F有两个子节点S1和S2
//节点F为第k层的第m个,所以F前肯定有m-1个节点(在第k层
//因为是完全二叉树所以S1前肯定有2(m-1)个节点所以S1是第2m-1个
//S2肯定是第2m个了

则父节点下标为2^(k)-2+m,子节点下标为2^(k+1)+2m-3 和2^(k+1)+2m-2(不要忘了上面的证明,第k层最后一个节点的下标为2^k-2)

//很明显父节点坐标与子节点坐标关系:
//son_index1=2×father_index+1
//son_index2=2×father_index+2
//father_index=son_index/2(前提 father_index和on_index都是int类型

建议:以后记住这个关系就行,不要每次遇到就强迫症似的非得在大脑证明一遍,浪费时间


建堆的时候总是从倒数第二排最后一个节点开始建,说的比较高级些就是从最后一个非叶节点开始建,然后就比较容易看到for(i=size/2-1;i>0;i--)


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值