Code Bye

关于大顶堆的疑问

将一个数组排成大顶堆的话,
假如这个数组下标从1开始,那么      子节点下标/2 = 父节点下标
假如这个数组从0开始,那么              子节点下标/2 ≠ 父节点下标
下图是本人本人画的一个大致的大顶堆和下标之间的关系

然后有一道题目定义了下标从0开始,却同时定义父节点 = 子节点/2
这样的话结合下面题目中的3 4 5 空,例如上图堆中最后插入新的数字10,
那么10应该跟它的父节点9进行对比,但是按照下标/2,10的下标是6,6/2=3,却跟下标是3的数字对比了,
所以感觉这里题目会不会有问题?
问一下这里的题目是不是有错?
解决方案

45

题主的理解是正确的。题目本人都矛盾呢,从其说明里面看,下标 i 是要 >=1 的,后面写实现的时候,又把 [0] 用了。

10

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来全部人都是说一套做一套,不是吗?

45

文字说明中,下标编号,不是C 语言的这种从0开始的
然而,程序是用C,C++ 编码实现的,下标是从0开始的。
大致是这样吧,有点不够严谨了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于大顶堆的疑问