递归最小堆错误
Recursive min-heap error?
我编写了下面的代码来构造最小堆。这是一个递归调用。我不知道我在哪里出错了,因为输出不是minheap..有人可以帮助我这个:
void MinHeap(int root, int bottom)
{
int parent;
int temp;
if(bottom > root)
{
parent = (bottom -1) / 2;
if(HeapArray[parent] > HeapArray[bottom])
{
temp = HeapArray[parent];
HeapArray[parent] = HeapArray[bottom];
HeapArray[bottom] = temp;
MinHeap(root, parent);
}else if (HeapArray[parent] > HeapArray[bottom-1])
{
temp = HeapArray[parent];
HeapArray[parent] = HeapArray[bottom-1];
HeapArray[bottom-1] = temp;
MinHeap(root, parent);
}
} }
例如,我得到以下min_heap:
1935、1952、1940、1998、1962
这显然不是1952年和1998年的min_heap
代码看起来很好,您得到的是最小二进制堆数组压缩表示。
你可以这样解释你得到的数据:
1935, 1952, 1940, 1998, 1962
root--child1
| |---------- child1
| |------------------child2
|-------child2
因为最小堆的规则是:
该树为完全二叉树;也就是说,树的所有层次,除了最后一个(最深的)可能被完全填充,并且,如果树的最后一层不完整,该层的节点是从左至右填充
根据比较谓词,所有节点要么[大于或等于]要么[小于或等于]它的每个子节点
(http://en.wikipedia.org/wiki/Binary_heap)
代码正确地计算了最小堆。在你的问题中没有太多的信息,但对于你刚刚发布的(和代码),看起来是正确的。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 从类型列表中递归删除重复项会导致编译器堆空间错误 (VS2017)
- 递归求和任务的错误答案
- 为什么我的递归代码给出 sigsegv 错误?
- 任何人都可以查明我的递归函数中的错误吗?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 对可变参数函数的递归调用的链接器错误
- 我试图用c++编写递归fibonacci序列,但当我编译时,我遇到了一个错误
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 递归树遍历/分支删除的隔离错误
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- 为什么使用递归lambda时会遇到编译错误
- 使用递归方法遇到分段错误
- 分段错误(核心转储)错误C++递归调用
- 尝试"复制"shared_ptr向上转换行为会导致复制构造函数上的无限递归(导致段错误)
- 我在具有递归函数的这部分代码中收到此错误
- 编译器错误递归链表
- 在另一个类的函数中返回一个类,反之亦然,编译错误(递归)