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

pseudo code suppression feuille ou 1 enfant

parent a2bf122c
No related branches found
No related tags found
No related merge requests found
Pipeline #15771 passed
...@@ -53,6 +53,7 @@ ajout(arbre, clé) ...@@ -53,6 +53,7 @@ ajout(arbre, clé)
si est_vide(arbre) si est_vide(arbre)
arbre = noeud(clé) arbre = noeud(clé)
sinon sinon
arbre = position(arbre, clé)
si clé < clé(arbre) si clé < clé(arbre)
gauche(arbre) = noeud(clé) gauche(arbre) = noeud(clé)
sinon si clé > clé(arbre) sinon si clé > clé(arbre)
...@@ -142,8 +143,6 @@ memory would be allocated: ...@@ -142,8 +143,6 @@ memory would be allocated:
# La suppression de clé # La suppression de clé
* Cas simples: le noeud à supprimer et est feuill ou a un seul fils.
* Comment faites-vous?
. . . . . .
...@@ -151,7 +150,13 @@ memory would be allocated: ...@@ -151,7 +150,13 @@ memory would be allocated:
:::: column :::: column
Une feuille (le 19 p.ex.). ## Cas simples:
* le noeud est absent,
* le noeud est une feuille
* le noeuds a un seul fils.
## Une feuille (le 19 p.ex.).
```{.mermaid format=pdf width=400 loc=figs/} ```{.mermaid format=pdf width=400 loc=figs/}
flowchart TB; flowchart TB;
...@@ -165,7 +170,7 @@ flowchart TB; ...@@ -165,7 +170,7 @@ flowchart TB;
:::: column :::: column
Un seul fils (le 20 p.ex.). ## Un seul fils (le 20 p.ex.).
```{.mermaid format=pdf width=400 loc=figs/} ```{.mermaid format=pdf width=400 loc=figs/}
flowchart TB; flowchart TB;
...@@ -180,18 +185,23 @@ flowchart TB; ...@@ -180,18 +185,23 @@ flowchart TB;
style 18 fill:#fff,stroke:#fff,color:#fff style 18 fill:#fff,stroke:#fff,color:#fff
``` ```
## Dans tous les cas
* Chercher le noeud à supprimer: utiliser `position()`.
:::: ::::
::: :::
# La suppression de clé # La suppression de clé
## Cas compliqué
::: columns ::: columns
:::: column :::: column
## Cas compliqué
* Le noeud à supprimer à (au moins) deux descendants (10). * Le noeud à supprimer à (au moins) deux descendants (10).
```{.mermaid format=pdf width=400 loc=figs/} ```{.mermaid format=pdf width=400 loc=figs/}
...@@ -214,10 +224,98 @@ flowchart TB; ...@@ -214,10 +224,98 @@ flowchart TB;
* On peut pas juste enlever `10` et recoller... * On peut pas juste enlever `10` et recoller...
* Proposez une solution bon sang! * Proposez une solution bon sang!
. . .
## Solution
* Échange de la valeur à droite dans le sous-arbre de gauche ou
...
* de la valeur de gauche dans le sous-arbre de droite!
:::: ::::
::: :::
# Le pseudo-code de la suppression
## Pour une feuille ou absent (ensemble)
```
arbre suppression(arbre, clé)
sous_arbre = position(arbre, clé)
si est_vide(sous_arbre) ou clé(sous_arbre) != clé
retourne vide
sinon
si est_feuille(sous_arbre) et clé(sous_arbre) == clé
nouvelle_feuille = parent(arbre, sous_arbre)
si est_vide(nouvelle_feuill)
arbre = vide
sinon
si gauche(nouvelle_feuille) == sous_arbre
gauche(nouvelle_feuille) = vide
sinon
droite(nouvelle_feuille) = vide
retourne sous_arbre
```
# Il nous manque le code pour le `parent`
## Pseudo-code pour trouver le parent (5min -> matrix)
```
arbre parent(arbre, sous_arbre)
si est_non_vide(arbre)
actuel = arbre
clé = clé(sous_arbre)
faire
parent = actuel
si (clé != clé(actuel))
si clé < clé(actuel)
actuel = gauche(actuel)
sinon
actuel = droite(actuel)
sinon
retour parent
tant_que (actuel != sous_arbre)
retourne vide
```
# Le pseudo-code de la suppression
## Pour un seul enfant (5min -> matrix)
```
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)
sinon
si droite(parent) == sous_arbre
droite(parent) = gauche(sous_arbre)
sinon
gauche(parent) = gauche(sous_arbre)
retourne sous_arbre
```
# Le pseudo-code de la suppression
## Pour au moins deux enfants (ensemble)
# Trier un tableau à l'aide d'un arbre binaire # Trier un tableau à l'aide d'un arbre binaire
* Tableau représenté comme un arbre binaire. * Tableau représenté comme un arbre binaire.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment