Voilà j'ai un problème sur les 3 différents affichages demandés.
Parcourir un arbre et afficher les éléments qu’il contient suivant un parcours :
A. itératif de gauche à droite, en largeur.

B. itératif de gauche à droite, en profondeur.

C. infixe de gauche à droite.

Nom : abr.png
Affichages : 805
Taille : 16,4 Ko

Je propose de commencer par la A.
Un parcours itératif en largeur donnera : 20 5 15 3 7 23 1
L'algo va devoir utiliser une file. L'idée de base est : on enfile la racine dans la file, ensuite tant que la file n'est pas vide on défile, pour le nœud récupéré on l'affiche, puis on enfile ses enfants (s'il en a évidemment).
Une trace donnerait :
[20] on enfile la racine
[5 15] on défile 20, affiche 20 et on enfile les deux enfants
[15 3 7] on défile 5 on affiche 5 et on enfile les deux enfants
[3 7 23] on défile 15, on affiche 15 et on enfile son seul fils droit
[7 23 1] on défile 3, on affiche 3 et on enfile son seul fils gauche
[23 1] on défile 7, on affiche 7, pas d'enfants on enfile rien
[1] on défile 23, on affiche 23, pas d'enfants on enfile rien
[] on défile 1, on affiche 1, pas d'enfants on enfile rien, la file est vide on s'arrête.

Voilà mon code ! Need help

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef STRUCT
#define STRUCT
 
//enfaite j'aurais mieux fait d'appeler la structure node qui est élément en french
typedef struct noeud noeud;
struct noeud{
 
    unsigned int key;
    noeud *right;
    noeud *left;
    noeud *suivant;
 
};
 
typedef struct File File;
struct File{
 
    noeud *premier;
};
#endif // STRUCT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void enfiler(File *file, noeud *nouveau){
 
    if(file == NULL || nouveau == NULL)
        exit(EXIT_FAILURE);
 
    nouveau->suivant = NULL;
 
    if(file->premier == NULL)
        file->premier = nouveau;
 
    else{
        noeud *actuel = file->premier;
        while(actuel->suivant != NULL)//actuel->suivant car on sait file->premier est différent de NULL
            actuel = actuel->suivant;
 
        actuel->suivant = nouveau;
    }
}
 
int defiler(File *file){
 
    int nombre = 0;
    if(file == NULL)
        exit(EXIT_FAILURE);
 
    if(file->premier != NULL){
        noeud *actuel = file->premier;
        nombre = actuel->key;
        file->premier = file->premier->suivant;
        free(actuel);
    }
    return nombre;
}
 
void aff1(noeud *tree, File *file){
 
    enfiler(file, tree);
    noeud *actuel = file->premier;
    if(actuel == NULL)
        return;
    else{
        while(actuel != NULL){
            printf("%d\n", defiler(file));
            if(tree->left != NULL)
                enfiler(file, tree->left);
 
            if(tree->right != NULL)
                enfiler(file, tree->right);
 
            actuel = actuel->suivant;
            tree = tree->left;
        }
    }
}