zoukankan      html  css  js  c++  java
  • 判断一个序列是不是堆的方法

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

    推分为大堆,和小堆 ,

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

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

  • 相关阅读:
    如何在三维坐标中选择点
    java slider
    java combobox 多选框
    java BorderFrame.java
    java radioButton
    java checkbox
    java 文本窗口
    constexpr
    测试框架
    java 计算器
  • 原文地址:https://www.cnblogs.com/xusir/p/3433936.html
Copyright © 2011-2022 走看看