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

    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;
    }

推分为大堆,和小堆 ,

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

大堆下面所有后裔都小于上面的节点,小堆反之。百度百科上对堆的解释让我无法理解。还是自己研究一下好理解。

原文地址:https://www.cnblogs.com/xusir/p/3433936.html