Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Forendiskussionen   (Übersicht)

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
pruefungen:bachelor:aud:loesungws11 [18.03.2018 19:33] Evrenpruefungen:bachelor:aud:loesungws11 [24.01.2019 21:56] (aktuell) LasagneAlForno
Zeile 146: Zeile 146:
  
 <code java> <code java>
-private void versickern(Knoten k) { +private static void versickern(Knoten k) { 
- Knoten groesser = null;+ Knoten groesser = null;
  
- if(links != null && rechts != null) { + if (k.links != null && k.rechts != null) { 
- groesser = (links.wert > rechts.wert) links rechts;+ if (k.links.wert > k.rechts.wert) 
 + groesser = k.links
 + } else { 
 + groesser = k.rechts; 
 + }
  
- } else if(links != null) { + } else if (k.links != null) { // hier ist es wichtig, ein "else if" statt einem if zu verwenden! 
- groesser = links;+ groesser = k.links;
  
- } else if(rechts != null) { + } else if (k.rechts != null) { 
- groesser = rechts; + groesser = k.rechts; 
- }+ }
  
- if(groesser == null) { + if (groesser == null) { 
- return; + return; 
- }+ }
  
- if(k.wert > groesser.wert) + if (k.wert > groesser.wert) { 
- return;+ return; // fertig :) 
 + }
  
- vertausche(k, groesser);         + vertausche(k, groesser); 
- versickern(groesser); + versickern(groesser); // normalerweise würde man versickern(k) rekursiv aufrufen, aber die vertausche-Methode tauscht laut Aufgabenstellung nicht die Knoten, sondern nur deren Werte! 
-}+ 
 + }
 </code> </code>
 **b)** **b)**
 Nach dem Postorder-Prinzip: Nach dem Postorder-Prinzip:
 <code java> <code java>
-private void erzeugeHalde(Knoten k) { +private static void erzeugeHalde(Knoten k) { 
- if(k.left != null) + if (k.links != null) 
- erzeugeHalde(k.left);+ erzeugeHalde(k.links);
  
- if(k.right != null) + if (k.rechts != null) 
- erzeugeHalde(k.right);+ erzeugeHalde(k.rechts);
  
- versickern(k); + versickern(k); 
-+}
 </code> </code>
 **c)** **c)**
 <code java> <code java>
-public Knoten inListeSortieren() { + public static Knoten inListeSortieren() { 
- // Kann leere Halde nicht sortieren + // Kann leere Halde nicht sortieren 
- if (wurzel == null) + if (wurzel == null) { 
- return null;+ return null
 +
 +  
 + // Max-Heap-Eigenschaft herstellen 
 + erzeugeHalde(wurzel);
  
- // Max-Heap-Eigenschaft herstellen + // Wurzel entnehmen und zum Kopf unserer Liste machen 
- erzeugeHalde(wurzel);+ Knoten kopf = entferneMax()
 + Knoten schlepp = kopf;
  
- // Wurzel entnehmen und zum Kopf unserer Liste machen + // Wiederholt Wurzel entnehmen und an Liste anhängen 
- Knoten kopf = entferneMax(); + while (wurzel != null) { 
- Knoten schlepp = kopf; + schlepp.rechts = entferneMax(); 
- + schlepp = schlepp.rechts
- // Wiederholt Wurzel entnehmen und an Liste anhängen +
- while(wurzel != null) { +  
- schlepp.rechts = entferneMax(); + // Kopf unserer Liste zurückgeben 
- schlepp = schlepp.rechts;+ return kopf;
  }  }
- 
- // Kopf unserer Liste zurückgeben 
- return kopf; 
-} 
 </code> </code>