判断一个序列是不是堆的方法
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; }
推分为大堆,和小堆 ,
大堆根最大,小堆根最小,好像是废话。
大堆下面所有后裔都小于上面的节点,小堆反之。百度百科上对堆的解释让我无法理解。还是自己研究一下好理解。