您的位置:首页 > 其它

判断一个序列是不是堆的方法

2013-11-20 17:02 260 查看
private boolean isHeap(int[] arr) {
int len = arr.length;
if (arr[0] > arr[len - 1])// 大堆
{
for (int i = 0; i < len / 2; i++) {
if (2 * i + 2 >= len) {
if (arr[i] >= arr[2 * i + 1]) {
continue;
} else {
return false;
}
} else if (arr[i] >= arr[2 * i + 1] && arr[i] >= arr[2 * i + 2]) {
continue;
} else {
return false;
}
}
} else
for (int i = 0; i < len / 2; i++) {
if (2 * i + 2 >= len) {
if (arr[i] <= arr[2 * i + 1]) {
continue;
} else {
return false;
}
} else if (arr[i] <= arr[2 * i + 1] && arr[i] <= arr[2 * i + 2]) {
continue;
} else {
return false;
}
}
return true;
}


推分为大堆,和小堆 ,

大堆根最大,小堆根最小,好像是废话。

大堆下面所有后裔都小于上面的节点,小堆反之。百度百科上对堆的解释让我无法理解。还是自己研究一下好理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: