diff --git a/slides/cours_16.md b/slides/cours_16.md index fa915f4be9b84a6de2e78ce6f30c668b690b745f..417970948581335291ed7f786d6af164d7dd9a6e 100644 --- a/slides/cours_16.md +++ b/slides/cours_16.md @@ -427,10 +427,10 @@ sous-arbres de gauche et de droite. ## Exemple: les arbres lexicographiques -* Chaque nœud contient une information de type ordonné, la **clé**, +* Chaque nœud contient une information de type ordonné, la **clé**. * Par construction, pour chaque nœud $N$: - * Toutes clé du sous-arbre à gauche de $N$ sont inférieurs à la clé de $N$. - * Toutes clé du sous-arbre à droite de $N$ sont inférieurs à la clé de $N$. + * Toute clé du sous-arbre à gauche de $N$ est inférieure à la clé de $N$. + * Toute clé du sous-arbre à droite de $N$ est inférieure à la clé de $N$. # Algorithme de recherche @@ -438,7 +438,7 @@ sous-arbres de gauche et de droite. ```python arbre recherche(clé, arbre) - tante_que est_non_vide(arbre) + tant_que est_non_vide(arbre) si clé < clé(arbre) arbre = gauche(arbre) sinon si clé > clé(arbre) @@ -464,10 +464,10 @@ typedef struct _node { node *search(key_t key, node *tree) { node *current = tree; while (NULL != current) { - if (current->key > X) { - current = current->gauche; - } else if (current->key < X){ - current = current->droite; + if (current->key > key) { + current = current->left; + } else if (current->key < key){ + current = current->right; } else { return current; } @@ -493,7 +493,7 @@ additionné au nombre de nœuds dans le sous-arbre de droite. . . . ```C -int arbre_size(node *tree) { +int tree_size(node *tree) { if (NULL == tree) { return 0; } else { @@ -505,7 +505,7 @@ int arbre_size(node *tree) { # L'insertion dans un arbre binaire -* C'est bien joli de pouvoir faire des parcours, recherches, mais si on peut +* C'est bien joli de pouvoir faire des parcours, recherches, mais si on ne peut pas construire l'arbre.... ## Pour un arbre lexicographique @@ -594,12 +594,12 @@ ajout(arbre, clé) node *position(node *tree, key_t key) { node * current = tree; if (NULL != current) { - node *subtree = key > current->key ? current->right : - current->left; + node *subtree = key > current->key + ? current->right : current->left; while (key != current->key && NULL != subtree) { current = subtree; - subtree = key > current->key ? current->right : - current->left; + subtree = key > current->key + ? current->right : current->left; } } return current; @@ -672,7 +672,7 @@ node *add_key(node **tree, key_t key) { ## Cas simples: * le nœud est absent, -* le nœud est une feuille +* le nœud est une feuille, * le nœuds a un seul fils. ## Une feuille (le 19 p.ex.). @@ -721,7 +721,7 @@ flowchart TB; ## Cas compliqué -* Le nœud à supprimer à (au moins) deux descendants (10). +* Le nœud à supprimer a (au moins) deux descendants (10). ```{.mermaid format=pdf width=400 loc=figs/} flowchart TB; @@ -739,19 +739,18 @@ flowchart TB; :::: column -* Si on enlève 10 il se passe quoi? +* Si on enlève 10, il se passe quoi? . . . -* On peut pas juste enlever `10` et recoller... -* Proposez une solution bon sang! +* On ne peut pas juste enlever `10` et recoller... +* Proposez une solution ! . . . ## Solution -* Échange de la valeur à droite dans le sous-arbre de gauche ou - ... +* Échange de la valeur à droite dans le sous-arbre de gauche ou ... * de la valeur de gauche dans le sous-arbre de droite! * Puis, on retire le nœud. @@ -760,7 +759,7 @@ flowchart TB; ::: -# Le pseudo-code de la suppression +# Le pseudo-code de la suppression ## Pour une feuille ou absent (ensemble) @@ -807,7 +806,7 @@ arbre parent(arbre, sous_arbre) retourne vide ``` -# Le pseudo-code de la suppression +# Le pseudo-code de la suppression \footnotesize @@ -826,7 +825,7 @@ arbre suppression(arbre, clé) sinon gauche(parent) = droite(sous_arbre) sinon - si droite(parent) == sous_arbreou est_ + si droite(parent) == sous_arbre droite(parent) = gauche(sous_arbre) sinon gauche(parent) = gauche(sous_arbre)