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...


Anmelden zum Antworten