diff --git a/slides/cours_15.md b/slides/cours_15.md index 3ab8419c51b38c93bb6ff179feb319d055132762..cbd291e94ccad2daafed6086863aebf208886eaa 100644 --- a/slides/cours_15.md +++ b/slides/cours_15.md @@ -764,15 +764,71 @@ sous-arbres de gauche et de droite. ```python arbre recherche(clé, arbre) - tante que est_non_vide(arbre) - si clé < arbre.clé + tante_que est_non_vide(arbre) + si clé < clé(arbre) arbre = gauche(arbre) - sinon si clé > arbre.clé + sinon si clé > clé(arbre) arbre = droite(arbre) sinon retourne arbre retourne NULL - ``` +# Algorithme de recherche, implémentation (live) + +\footnotesize + +. . . + +```C +typedef int key_t; +typedef struct _node { + key_t key; + struct _node* left; + struct _node* right; +} node; +typedef node* tree_t; +tree_t search(key_t key, tree_t tree) { + tree_t current = tree; + while (NULL != courant && !success) { + if (current->key > X) { + current = courant->gauche; + } else if (current->key < X){ + current = courant->droite; + } else { + return current; + } + } + return NULL; +} +``` + +# Exercice (5-10min) + +Écrire le code de la fonction + +```C +int tree_size(tree_t tree); +``` + +qui retourne le nombre total de noeuds d'un arbre et poster le résutat sur +matrix. + +Indication: la taille, est 1 + le nombre de noeuds du sous-arbre de gauche +additionné au nombre de noeuds dans le sous-arbre de droite. + +. . . + +```C +int arbre_size(tree_t tree) { + if (NULL == tree) { + return 0; + } else { + return 1 + tree_size(tree->left) + tree_size(tree->right); + } +} +``` + + + [^1]: Copyright cours de mathématiques pendant trop d'années.