有效的最小堆数
Valid Min Heaps
本文关键字:有效 更新时间:2023-10-16
我需要确定数组是否是有效的最小堆。如果不是,哪些价值观是不合时宜的?我已经对成堆的东西感到困惑了,所以这对我来说很困难。有人能给我解释一下吗?
[0,6,2,26,24,22,20,48,46,44]
在基于数组的最小堆中,项存储在一个完整的二进制树中。假设是一个基于0的数组,这意味着索引i
中项目的左子项将在索引2i + 1
中,右子项将位于索引2i + 2
中。
最小堆不变量是每个节点都小于其子节点。因此,为了检查堆是否合法,您所需要做的就是遍历所有内部节点,并确保此条件成立,即对于索引i中的每个内部堆节点,a[i] < a[2*i + 1] && a[i] < a[2*i + 2]
。
如果有帮助的话,下面是一个更图形化的堆。不变的是,每个父项都小于其两个子项。
0
6 2
26 24 22 20
48 46 44
正如您所看到的,每个节点都大于其父节点,因此这是一个有效的最小堆。
堆可以实现为一个数组,因为单元格之间的顺序是这样的。现在,您应该遍历堆,每次访问节点时,根据堆的要求,验证它是否大于其父节点。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将此布尔值传递给此函数的最有效方法是什么?