sto cercando di rispondere alla seguente domanda programmazione:Restore condizione mucchio nell'intero mucchio
Nel programma heap.java, il metodo insert()
inserisce un nuovo nodo in mucchio e garantisce la condizione mucchio è conservato. Scrivi un metodo toss()
che colloca un nuovo nodo nell'array di heap senza tentare di mantenere la condizione di heap. (Forse ogni nuovo elemento può essere semplicemente posizionato alla fine dell'array.) Quindi scrivere un metodo restoreHeap()
che ripristina la condizione heap in tutto l'heap. L'utilizzo di toss()
ripetutamente seguito da un singolo restoreHeap()
è più efficiente rispetto all'utilizzo di insert()
ripetutamente quando è necessario inserire una grande quantità di dati alla volta. Vedi la descrizione di heapsort per gli indizi. Per testare il programma, inserire alcuni elementi, aggiungerne altri e quindi ripristinare l'heap.
Ho scritto il codice per la funzione di lancio che inserisce correttamente il nodo alla fine e non modifica la condizione di heap. Sto avendo problemi con la funzione restoreHeap
e non riesco a capirlo. Ho incluso le due funzioni di seguito.
il codice completo della heap.java è here (comprende toss()
e restoreHeap()
)
toss()
- ho basato questo disattiva la funzione di inserimento
public boolean toss(int key)
{
if(currentSize==maxSize)
return false;
Node newNode = new Node(key);
heapArray[currentSize] = newNode;
currentSize++;
return true;
} // end toss()
restoreHeap()
- ho basato questo disattiva la funzione trickleUp ed io sto ottenendo un StackOverflowError.
public void restoreHeap(int index)
{
int parent = (index-1)/2;
Node bottom = heapArray[index];
while(index > 0 &&
heapArray[parent].getKey() < bottom.getKey())
{
heapArray[index] = heapArray[parent]; // move it down
index = parent;
parent = (parent-1)/2;
} // end while
heapArray[index] = bottom;
while(index != 0)
{
restoreHeap(parent++);
}
} // end restoreHeap()
Qualche idea? Aiuto apprezzato
Grazie mille. E 'stato molto utile! –