0
我已经编写了以下程序以最大化Java中的堆。在Java中最大化堆 - 堆栈溢出错误
package heap;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class HeapMaxify
{
public static void main(String[] s)
{
List<Integer> inp = new ArrayList<Integer>();
Scanner inpObj = new Scanner(System.in);
inp.add(inpObj.nextInt());
for(int i=1;i<=inp.get(0);i++)
inp.add(inpObj.nextInt());
System.out.println("Current heap follows :");
int elemInLine = 1;
int count = 0;
for(int i=1;i<=inp.get(0);i++)
{
System.out.print(inp.get(i)+"\t");
count++;
if(count==elemInLine)
{
System.out.println();
count = 0;
elemInLine *= 2;
}
}
maxifyHeap(inp,1);
System.out.println("Maxified heap follows :");
elemInLine = 1;
count = 0;
for(int i=1;i<=inp.get(0);i++)
{
System.out.print(inp.get(i)+"\t");
count++;
if(count==elemInLine)
{
System.out.println();
count = 0;
elemInLine *= 2;
}
}
}
private static void maxifyHeap(List<Integer> inp, int curIndex)
{
int leftIndex = 2*curIndex;
int rightIndex = (2*curIndex)+1;
int largestIndex=0;
int temp;
if(leftIndex<=inp.get(0)&&inp.get(leftIndex)>inp.get(curIndex))
largestIndex = leftIndex;
else
largestIndex = curIndex;
if(rightIndex<=inp.get(0)&&inp.get(rightIndex)>inp.get(largestIndex))
largestIndex = rightIndex;
if(largestIndex!=curIndex)
{
temp = inp.get(largestIndex);
inp.set(largestIndex, inp.get(curIndex));
inp.set(curIndex, temp);
maxifyHeap(inp, largestIndex);
}
}
}
我得到的输出INP相同。 我觉得我期待递归方法改变inp ArrayList是有问题的。
这对我来说很愚蠢。让我尝试一下。 – mbsingh
Entropy, 谢谢。 把去年if语句里面的递归调用的工作是这样的: 如果(!largestIndex = curIndex) \t \t { \t \t \t TEMP = inp.get(largestIndex); \t \t \t inp.set(largestIndex,inp.get(curIndex)); \t \t \t inp.set(curIndex,temp); \t \t \t maxifyHeap(inp,largestIndex); \t \t} 但现在的问题是,它不是最大化堆,即输入和输出是相同的: 我认为在我调用递归方法后期望inp ArrayList发生改变时出现了问题。 关于我如何解决这个问题的任何输入? – mbsingh