Zeiger als Parameter - Wer kann mir helfen
-
Hallo,
ich soll aus den gegebenen Funktionen eine Funktion mit 2 Zeigerparametern machen. Könnt ihr mir sagen, ob meine Lösung richtig ist.. bin mir nicht ganz sicher.
Also gegeben:
Gegeben sei das folgende C–Programmstück für die Berechnung der Länge der küurzesten und längsten Pfade in binären Bäumen:
typedef unsigned int Nat; typedef char * Element; typedef struct Node *Set; struct Node { Element info; Set l; Set r; }; #define isEmpty(s) ((s) == (Set)0) Nat max(Nat i, Nat j) { return i > j ? i : j; } Nat min(Nat i, Nat j) { return i < j ? i : j; } Nat maxPathLength(Set s) { if (isEmpty(s)) return 0; return 1 + max(maxPathLength(s->l), maxPathLength(s->r)); } Nat minPathLength(Set s) { if (isEmpty(s)) return 0; return 1 + min(minPathLength(s->l), minPathLength(s->r)); }
Und hieraus soll rauskommen:
Globale Variablen:
Nat minPath, maxPath; Set s;
Ein m¨oglicher Aufruf:
... minMaxPath(s, &minPath, &maxPath); ...
Die zu vervollständigende Prozedur:
void minMaxPath(Set s, . . . minp, . . . maxp) { .... }
Also meine Idee war:
void minMaxPath(Set s, Nat * minp, Nat * maxp){ if (isEmpty(s)) return 0; { Nat minr, maxr, minl, maxl; minMaxPath(s->r,&minr,&maxr); minMaxPath(s->l,&minl,&maxl), *minp = min(minr,minl); *maxp = max(maxr,maxl); } }
Bin mir bei dieser Lösung aber nicht sicher, ob die Baumtiefe richtig ermittelt wird, weil es nirgendwo hochzählt...
Könnt ihr mir bitte helfen? Hab irgendwie einen Brett vorm Kopf :(.
Danke,
Aeon
ps. sorry kriege die Einrückung nicht hin...
-
mach doch so:
void minMaxPath (Set s, Nat *minp, Nat *maxp) { *minp = minPathLength(s); *maxp = maxPathLength(s); }
-
Die neue Prozedur sollt minPathLenght und maxPathLength ersetzen, deswegen darf ich die nicht benutzen :/.
-
aeonfluxx schrieb:
Die neue Prozedur sollt minPathLenght und maxPathLength ersetzen, deswegen darf ich die nicht benutzen :/.
das ist natürlich gemein
könnteste vielleicht 'minPathLength(s)' und 'maxPathLength(s)' so umbauen, dass sie nicht mehr rekursiv sind und dann kopierst du den code in die neue funktion...