Skip to content
Snippets Groups Projects
Verified Commit bab8ccf0 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

ended parcours

parent a9923861
No related branches found
No related tags found
No related merge requests found
Pipeline #15636 passed
......@@ -376,7 +376,7 @@ typedef struct _node {
```C
NULL -> arbre (vide)
<n, arbre, arbre> -> arbre
visiter(arbre) -> noeud
visiter(arbre) -> noeud (la racine de l'arbre)
gauche(arbre) -> arbre (sous-arbre de gauche)
droite(arbre) -> arbre (sous-arbre de droite)
```
......@@ -424,8 +424,10 @@ graph TD;
# Parcours d'arbres binaires
* Appliquer une opération à tous les noeuds de l'arbre.
* Nécessité de **parcourir** l'arbre.
* Appliquer une opération à tous les noeuds de l'arbre,
* Nécessité de **parcourir** l'arbre,
* On utilise uniquement l'interface définie plus haut (visiter, gauche,
droite).
## Une idée de comment parcourir cet arbre?
......@@ -475,7 +477,7 @@ graph TD;
* La récursivité c'est la vie.
```
parcours_infixe(arbre a) :
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
......@@ -506,7 +508,7 @@ graph TD;
:::: column
```
parcours_infixe(arbre a) :
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
......@@ -557,12 +559,12 @@ graph TD;
:::: column
```
parcours_infixe(arbre a) :
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
```
## Remarque
......@@ -600,7 +602,7 @@ void tree_print(tree_t tree, int n) {
printf(" ");
}
printf("%d\n", tree->info);
tree_print(tree->gauche, n+1);
tree_print(tree->right, n+1);
}
}
```
......@@ -624,9 +626,86 @@ void tree_print(tree_t tree, int n) {
```
parcours_infixe(arbre a)
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
si est_pas_vide(gauche(a))
parcours_infixe(gauche(a))
visiter(A)
si est_pas_vide(droite(A))
parcours_infixe(droite(A))
```
# Correction
* Les deux parcours sont des modifications **triviales**[^1] de l'algorithme
infixe.
## Le parcours postfixe
```python
parcours_postfoxe(arbre a)
si est_pas_vide(gauche(a))
parcours_postfixe(gauche(a))
si est_pas_vide(droite(a))
parcours_postfixe(droite(a))
visiter(a)
```
## Le parcours préfixe
```python
parcourx_préfixe(arbre a)
visiter(a)
si est_pas_vide(gauche(a))
parcours_préfixe(gauche(a))
si est_pas_vide(droite(a))
parcours_préfixe(droite(a))
```
. . .
**Attention:** L'implémentation de ces fonctions en C sont **à faire** en
exercice (inspirez vous de ce qu'on a fait avant)!
# Exercice: parcours
## Comment imprimer l'arbre ci-dessous?
```
f
/
e
+
d
*
c
-
b
*
a
```
. . .
## Bravo vous avez trouvé!
* Il s'agissait du parcours D, R, G.
# Implémentation
## Vous avez 5 min pour implémenter cette fonction et la poster sur matrix!
. . .
```C
void pretty_print(tree_t tree, int n) {
if (NULL != tree) {
pretty_print(tree->right, n+1);
for (int i = 0; i < n; ++i) {
printf(" ");
}
printf("%d\n", tree->info);
pretty_print(tree->left);
}
}
```
[^1]: Copyright cours de mathématiques pendant trop d'années.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment