我现在正在学习堆,显然更多地关注了堆的min元素,但是我只是想知道如何找到max元素?对于min元素,您只需要返回根,不知道如何以最大值为单位?
最佳答案
定义变量max并将其初始化为0.
HeapNode[] h;
int last;
int max=0;
如果堆不为空,则从0级别和0位置(根)开始,检查最大值并迭代到左子对象和右子对象.
public int getMax() throws Exception {
if (isEmpty()) {
Exception EmptyHeapException = new EmptyHeapException();
throw EmptyHeapException;
} else {
//findMax(0, 0); //If you want to use Iteration
for(int i=0;i<=last;i++)
max = Math.max(h[i].key, max);//Updated Thanks Raul Guiu
return max;
}
}
在每个节点上进行迭代,直到Node最后.
private void findMax(int i, int level) {
if (i > last) return;
if(max<h[i].key)
max=h[i].key;
findMax(2*i+1, level+1);//left node
findMax(2*i+2, level+1);//right node
}
public boolean isEmpty() {
return (last < 0);
}
您从堆中获得最大价值.