将一个数组排成大顶堆的话,
假如这个数组下标从1开始,那么 子节点下标/2 = 父节点下标
假如这个数组从0开始,那么 子节点下标/2 ≠ 父节点下标
下图是本人本人画的一个大致的大顶堆和下标之间的关系
然后有一道题目定义了下标从0开始,却同时定义父节点 = 子节点/2
这样的话结合下面题目中的3 4 5 空,例如上图堆中最后插入新的数字10,
那么10应该跟它的父节点9进行对比,但是按照下标/2,10的下标是6,6/2=3,却跟下标是3的数字对比了,
所以感觉这里题目会不会有问题?
问一下这里的题目是不是有错?
假如这个数组下标从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、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来全部人都是说一套做一套,不是吗?
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来全部人都是说一套做一套,不是吗?
45
文字说明中,下标编号,不是C 语言的这种从0开始的
然而,程序是用C,C++ 编码实现的,下标是从0开始的。
大致是这样吧,有点不够严谨了
然而,程序是用C,C++ 编码实现的,下标是从0开始的。
大致是这样吧,有点不够严谨了