2017-05-22 4 views
0

J'essaie donc de créer une liste chaînée à partir d'un arbre binaire en utilisant le précommande tranversal. J'ai tellement de problèmes à le faire, j'ai vu certaines des "solutions" mais je n'ai pas aimé! J'essaie quelque chose de simple.Création d'une liste chaînée à partir d'un arbre binaire (précommande tranversale)

Voici le code que je suis jusqu'à présent:

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); 
    } 
} 

Je reçois toujours une liste vide!

Répondre

3

si (! A) {* l = NULL; }

Cela AllWays la dernière chose faite dans votre fonction, avec le nul dans l * étant passé toute la hauteur.

Le reste a aussi des problèmes:

r = r-> suivant;

Mais vous ne définissez r->next à quoi que ce soit. Vous devrez le faire en premier.

De plus, lorsque vous appelez d'abord preorder(), qu'est-ce que *l indique? Vous seriez probablement mieux, au lieu de passer dans un LInt *, ayant la fonction retourner une charpie * (joindre les listes après les appels internes à preorder())

+0

Oh, mon mauvais! Tu as raison. – Bruno

+0

il devrait pointer vers NULL au début. – Bruno

+0

J'aimerais, mais je ne peux pas changer la déclaration. Il a été mis en place par mon professeur. – Bruno