题目:请说明有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;
}
共勉:你多学一样本事,就少说一句求人的话。