跳到主要内容

24、数据结构与算法 - 实战:堆习题

 题目:请说明有N个元素的堆的高度为logN
 解答:堆是完全二叉树。除了底层外,其他所有层都是满的。
 因此堆至少有2^h个元素,最多有2^(h+1)-1个元素,即2^h <= N <= 2^(h+1)-1
 这表明h <= logN <= (h+1);由于h为整数,所以h=logN

题目:给定一个最大堆,查找最小元素
思路: 在最大堆中,最小元素只可能是叶子节点。
因为最后一个节点(x)的双亲节点((x-1)/2)的下一个节点为第一个叶子节点((x-1)/2+1)
其中x= size - 1

/**
 * 题目:给定一个最大堆,查找最小元素
 * @param heap 最大堆
 * @return 堆中最小元素
 */
public int findMinInMaxHeap(Heap heap) {
    // 从左至右,第一个叶子节点
    int index = heap.getSize() / 2;
    // 假设第一个叶子节点为最小值
    int min = heap.getArray()[index];
    // 遍历叶子节点
    for (int i = index + 1; i < heap.getSize(); i++) {
        if (heap.getArray()[i] < min) {
            min = heap.getArray()[i];
        }
    }
    return min;
}
共勉:你多学一样本事,就少说一句求人的话。