staram się odpowiedzieć na następujące pytanie: programowaniaprzywracania stanu sterty w całej sterty
W programie heap.java metoda insert()
wstawia nowy węzeł w sterty i zapewnia, że stan sterty jest zachowana. Napisz metodę toss()
, która umieszcza nowy węzeł w tablicy stosu bez próby utrzymania stanu stosu. (Być może każdy nowy element można po prostu umieścić na końcu tablicy.) Następnie napisz metodę restoreHeap()
, która przywróci stan sterty w całej sterty. Używanie toss()
wielokrotnie, a następnie pojedynczego restoreHeap()
jest bardziej wydajne niż wielokrotne używanie insert()
, gdy duża ilość danych musi być wstawiona w tym samym czasie. Zobacz opis heapsortu dla wskazówek. Aby przetestować swój program, włóż kilka przedmiotów, wrzuć trochę więcej, a następnie przywróć stertę.
Napisałem kod funkcji podrzucania, która pomyślnie wstawia węzeł na końcu i nie modyfikuje stanu sterty. Mam problemy z funkcją restoreHeap
i nie mogę tego objąć. Poniżej zamieściłem dwie funkcje.
pełny kod heap.java jest here (zawiera toss()
i restoreHeap()
)
toss()
- że na podstawie tego wyłączyć funkcję wkładki
public boolean toss(int key)
{
if(currentSize==maxSize)
return false;
Node newNode = new Node(key);
heapArray[currentSize] = newNode;
currentSize++;
return true;
} // end toss()
restoreHeap()
- na podstawie tego, że wyłączenie funkcji trickleUp i otrzymuję komunikat 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()
Wszelkie pomysły? Pomoc doceniona.
Dziękuję bardzo. To było bardzo pomocne! –