2017-05-22 4 views
0

Also versuche ich eine verknüpfte Liste aus einem Binärbaum mit Preorder Transversal zu erstellen. Ich habe so viele Probleme damit, ich sah einige der "Lösungen", aber ich mochte es nicht! Ich versuche etwas Einfaches. Ich erhalte immer eine leere ListeErstellen einer verknüpften Liste aus einem Binärbaum (Preorder Transversal)

typedef struct nodo { 
    int value; 
    struct nodo *left, *right; 
} *ABin; 

typedef struct lligada { 
    int value; 
    struct lligada *next; 
} *LInt; 

void preorder (ABin a, LInt * l) { 

    LInt r=*l,tmp; 
    tmp=r; 

    if (!a) { 
    *l=NULL; 
} 
    else { 
    r=malloc(sizeof(struct lligada)); 
    r->value=a->value; 
    r=r->next; 
    *l=tmp; 
    preorder (a->left,l); 
    preorder (a->right,l); 
    } 
} 

:

Dies ist der Code, den ich bis jetzt bekommen!

Antwort

3

wenn {* l = NULL (a!); }

das letzte, was mit dem Null-in * l in Ihrer Funktion getan Dies wird Allways werden den ganzen Weg bis weitergegeben werden.

Der Rest hat auch Probleme:

r = r-> next;

Aber Sie setzen nie r->next zu nichts. Du musst das zuerst tun.

Weiter, wenn Sie zuerst anrufen preorder() was, wenn überhaupt, ist *l zeigt auf? Sie wären wahrscheinlich besser dran, anstatt einen LInnt * zu übergeben, die Funktion einen Lint * zurückgeben zu lassen (die Listen nach den internen Anrufen an preorder() anschließen)

+0

Oh, mein Schlechter! Du hast recht. – Bruno

+0

sollte es am Anfang auf NULL zeigen. – Bruno

+0

Ich würde gerne, aber ich kann die Erklärung nicht ändern. Es wurde von meinem Lehrer umgesetzt. – Bruno

Verwandte Themen