000
05.11.2005, 14:18 Uhr
Incubus
|
Hallo,
kann mir jemand Hilfestellung zu dem Programm geben. Ich kann zur Zeit noch nicht so viel damit anfangen. Ich studiere neben der Arbeit Info und liege aufgrund verschiedener beruflicher Projekte einige Wochen hinter dem aktuellen Stoff.
Jetzt bräuchte ich Unterstützung, dass ich wenigstend die Aufgaben einsenden kann. Falls also jemand Interesse hat wäre ich Ihm überaus dankbar.
Aufgabe: Geben Sie eine rekursive PASCAL-Funktion an, welche die Anzahl der Knoten eines Binärbaumes bestimmt. Die Anzahl der Knoten in einem Baum ist die Summe aus den Knotenzahlen seiner Teilbäume plus eins (für den Wurzelknoten). Der leere Baum hat keinen Knoten.
Beurteilen Sie, ob es sich um eine sinnvolle Anwendung der Rekursion handelt.
program TesteBBKnotenzahl (input, output);
type tNatZahl = 0..maxint; tRefBinBaum = ^tBinBaum; tBinBaum = record info : integer; links : tRefBinBaum; rechts : tRefBinBaum; end;
var Wurzel : tRefBinBaum; Anzahl : integer;
function BBKnotenzahl ( inRefWurzel : tRefBinBaum) : tNatZahl; { bestimmt die Anzahl der Knoten des Binaerbaumes, auf dessen Wurzel inRefWurzel zeigt }
HIER SOLL DANN WAHSCHEINLICH DIE REKURSIVE FUNKTION STEHEN ;-)))
procedure BBKnotenEinfuegen ( inZahl : integer; var ioWurzel : tRefBinBaum); { fuegt in den Suchbaum, auf dessen Wurzel ioWurzel zeigt, ein Blatt mit Wert inZahl an. }
var Zeiger : tRefBinBaum;
begin if ioWurzel = nil then begin new (Zeiger); Zeiger^.Info := inZahl; Zeiger^.links := nil; Zeiger^.rechts := nil; ioWurzel := Zeiger end { if } else { ioWurzel <> nil } if inZahl < ioWurzel^.info then BBKnotenEinfuegen (inZahl, ioWurzel^.links) else BBKnotenEinfuegen (inZahl, ioWurzel^.rechts); end; { BBKnotenEinfuegen }
procedure BBAufbauen (var outWurzel : tRefBinBaum); { Liest eine Folge von Integer-Zahlen ein (0 beendet die Eingabe, gehoert aber nicht zur Folge) und speichert die Folge in einem binren Suchbaum. }
var Zahl : integer;
begin outWurzel := nil; { mit leerem Baum initialisieren } read (Zahl); while Zahl <> 0 do begin BBKnotenEinfuegen (Zahl, outWurzel); read (Zahl) end end; { BBAufbauen }
begin writeln('Bitte integer-Zahlen eingeben (0=Ende):'); BBAufbauen (Wurzel); { 2 mal aufrufen wie bei Aufg. 1 } Anzahl := BBKnotenzahl (Wurzel); Anzahl := BBKnotenzahl (Wurzel); writeln ('Der Baum hat ', Anzahl, ' Knoten.'); end. { TesteBBKnotenzahl } Dieser Post wurde am 05.11.2005 um 14:21 Uhr von Incubus editiert. |