diff --git a/slides/cours_16.md b/slides/cours_16.md index 11e667e0cf860e2bece422e22559648047bc51f7..784c765f05b452603287179827d0b35844377a6b 100644 --- a/slides/cours_16.md +++ b/slides/cours_16.md @@ -231,6 +231,7 @@ flowchart TB; * É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 noeud. :::: @@ -287,22 +288,19 @@ arbre parent(arbre, sous_arbre) ``` arbre suppression(arbre, clé) sous_arbre = position(arbre, clé) - si est_vide(sous_arbre) ou clé(sous_arbre) != clé - retourne vide - sinon - si est_vide(gauche(sous_arbre)) ou est_vide(droite(sous_arbre)) - parent = parent(arbre, sous_arbre) - si est_vide(gauche(sous_arbre)) - si droite(parent) == sous_arbre - droite(parent) = droite(sous_arbre) - sinon - gauche(parent) = droite(sous_arbre) + si est_vide(gauche(sous_arbre)) ou est_vide(droite(sous_arbre)) + parent = parent(arbre, sous_arbre) + si est_vide(gauche(sous_arbre)) + si droite(parent) == sous_arbre + droite(parent) = droite(sous_arbre) sinon - si droite(parent) == sous_arbre - droite(parent) = gauche(sous_arbre) - sinon - gauche(parent) = gauche(sous_arbre) - retourne sous_arbre + gauche(parent) = droite(sous_arbre) + sinon + si droite(parent) == sous_arbre + droite(parent) = gauche(sous_arbre) + sinon + gauche(parent) = gauche(sous_arbre) + retourne sous_arbre ``` @@ -310,11 +308,20 @@ arbre suppression(arbre, clé) ## Pour au moins deux enfants (ensemble) +``` +arbre suppression(arbre, clé) + sous_arbre = position(arbre, clé) # on revérifie pas que c'est bien la clé + si est_non_vide(gauche(sous_arbre)) et est_non_vide(droite(sous_arbre)) + max_gauche = position(sous_arbre, clé) + échange(clé(max_gauche), clé(sous_arbre)) + suppression(sous_arbre, clé) # +``` +# Exercices - - - +1. Implémenter le pseudo-code en C (30min -> martix). +2. Implémenter l'insertion et la suppression purement en récursif (30min -> + matrix). # Trier un tableau à l'aide d'un arbre binaire