我试图搜索一种算法来确定一个数组是否是一个最大堆,并遇到了这段代码。这段代码是否适用于arr1...n数组?arri >= arr2*i +2中的(2*i+2)代表什么?根据我的理解,max-heap的左子元素应该返回2*i,而不是2*i+2
/ Returns true if arr[i..n-1] represents a
// max-heap
bool isHeap(int arr[], int i, int n)
{
// If a leaf node
if (i > (n - 2)/2)
return true;
// If an internal node and is greater than its children, and
// same is recursively true for the children
if (arr[i] >= arr[2*i + 1] && arr[i] >= arr[2*i + 2] &&
isHeap(arr, 2*i + 1, n) && isHeap(arr, 2*i + 2, n))
return true;
return false;
} 发布于 2020-03-27 04:02:44
对于基于0的数组,i的子项是2i+1和2i+2 (0的子项是1和2;1的子项是3和4;依此类推)
对于基于1的数组,子项是2i和2i+1 (1的子项是2和3;2的子项是3和4;依此类推)
https://stackoverflow.com/questions/60875149
复制相似问题