diff --git a/slides/cours_15.md b/slides/cours_15.md
index ea58db26e0185afeedd599cf103c5786f91efec5..bc4fcd0da337beb76a0af6b1b7cc43882f649b69 100644
--- a/slides/cours_15.md
+++ b/slides/cours_15.md
@@ -938,112 +938,4 @@ tree_t position(tree_t tree, key_t key) {
 }
 ```
 
-# Code d'insertion en C (2/2)
-
-## Ajout du fils (ensemble)
-
-\scriptsize
-
-* 2 cas: arbre vide ou pas.
-* on retourne un pointeur vers le noeud ajouté (ou `NULL`)
-
-. . .
-
-```C
-tree_t add_key(tree_t *tree, key_t key) {
-    node_t *new_node = calloc(1, sizeof(*new_node)); // nouveauté!
-    new_node->key = key;
-    if (NULL == *tree) {
-        *tree = new_node;
-    } else {
-        tree_t subtree = position(*tree, key);
-        if (key == subtree->key) {
-            return NULL;
-        } else {
-            if (key > subtree->key) {
-                subtree->right = new_node;
-            } else {
-                subtree->left = new_node;
-            }
-        }
-    }
-    return new_node;
-}
-```
-
-# Une nouvelle corde à votre arc!
-
-\footnotesize
-
-```C
-void *calloc(size_t nmemb, size_t size); // man 3 calloc
-```
-
-```
-$ man 3 calloc
-
-The calloc() function allocates memory for an array of nmemb elements
-of size bytes each and returns a pointer  to  the  allocated  memory.
-The  memory is set to zero.  If nmemb or size is 0, then calloc() re‐
-turns either NULL, or a unique pointer value that can later  be  suc‐
-cessfully  passed to free().  If the multiplication of nmemb and size
-would result in integer overflow, then calloc() returns an error.  By
-contrast,  an integer overflow would not be detected in the following
-call to malloc(), with the result that an incorrectly sized block  of
-memory would be allocated:
-
-   malloc(nmemb * size);
-```
-
-# La suppression de clé
-
-* Cas simples: le noeud à supprimer et est feuill ou a un seul fils.
-* Comment faites-vous?
-
-. . .
-
-::: columns
-
-:::: column
-
-Une feuille (le 19 p.ex.).
-
-```mermaid
-flowchart TB;
-    10-->20;
-    10-->5
-    20-->21
-    20-->19
-```
-
-::::
-
-:::: column
-
-Un seul fils (le 20 p.ex.).
-
-```mermaid
-flowchart TB;
-    10-->20;
-    10-->5
-    20-->25
-    25-->24
-    25-->30
-    5-->4;
-    5-->8;
-```
-
-::::
-
-:::
-
-
-
-
-
-
-## Cas compliqué
-
-* Le noeud à supprimer à deux descendants.
-
 [^1]: Copyright cours de mathématiques pendant trop d'années.
diff --git a/slides/cours_16.md b/slides/cours_16.md
new file mode 100644
index 0000000000000000000000000000000000000000..67fd4997a263572e9e9c7c48344071f0415e6923
--- /dev/null
+++ b/slides/cours_16.md
@@ -0,0 +1,220 @@
+---
+title: "Arbres"
+date: "2022-03-02"
+patat:
+  eval:
+    tai:
+      command: fish
+      fragment: false
+      replace: true
+    ccc:
+      command: fish
+      fragment: false
+      replace: true
+  images:
+    backend: auto
+---
+
+# Pseudocode d'insertion (1/2)
+
+* Deux parties:
+    * Recherche le parent où se passe l'insertion.
+    * Ajout du fils dans l'arbre.
+
+## Recherche du parent
+
+```
+arbre position(arbre, clé)
+    si est_non_vide(arbre)
+        si clé < clé(arbre)
+            suivant = gauche(arbre)
+        sinon
+            suivant = droite(arbre)
+        tant que clé(arbre) != clé && est_non_vide(suivant)
+            arbre = suivant
+            si clé < clé(arbre)
+                suivant = gauche(arbre)
+            sinon
+                suivant = droite(arbre)
+            
+    retourne arbre
+```
+
+# Pseudocode d'insertion (2/2)
+
+* Deux parties:
+    * Recherche de la position.
+    * Ajout dans l'arbre.
+
+## Ajout du fils
+
+```
+ajout(arbre, clé)
+    si est_vide(arbre)
+        arbre = noeud(clé)
+    sinon
+        si clé < clé(arbre)
+            gauche(arbre) = noeud(clé)
+        sinon si clé > clé(arbre)
+            droite(arbre) = noeud(clé)
+        sinon
+            retourne
+```
+
+# Code d'insertion en C (1/2)
+
+## Recherche du parent (ensemble)
+
+. . .
+
+```C
+tree_t position(tree_t tree, key_t key) {
+    tree_t current = tree;
+    if (NULL != current) {
+        tree_t subtree = key > current->key ? current->right :
+        current->left;
+        while (key != current->key && NULL != subtree) {
+            current = subtree;
+            subtree = key > current->key ? current->right :
+            current->left;
+        }
+    }
+    return current;
+}
+```
+
+# Code d'insertion en C (2/2)
+
+## Ajout du fils (ensemble)
+
+\scriptsize
+
+* 2 cas: arbre vide ou pas.
+* on retourne un pointeur vers le noeud ajouté (ou `NULL`)
+
+. . .
+
+```C
+tree_t add_key(tree_t *tree, key_t key) {
+    node_t *new_node = calloc(1, sizeof(*new_node)); // nouveauté!
+    new_node->key = key;
+    if (NULL == *tree) {
+        *tree = new_node;
+    } else {
+        tree_t subtree = position(*tree, key);
+        if (key == subtree->key) {
+            return NULL;
+        } else {
+            if (key > subtree->key) {
+                subtree->right = new_node;
+            } else {
+                subtree->left = new_node;
+            }
+        }
+    }
+    return new_node;
+}
+```
+
+# Une nouvelle corde à votre arc!
+
+\footnotesize
+
+```C
+void *calloc(size_t nmemb, size_t size); // man 3 calloc
+```
+
+```
+$ man 3 calloc
+
+The calloc() function allocates memory for an array of nmemb elements
+of size bytes each and returns a pointer  to  the  allocated  memory.
+The  memory is set to zero.  If nmemb or size is 0, then calloc() re‐
+turns either NULL, or a unique pointer value that can later  be  suc‐
+cessfully  passed to free().  If the multiplication of nmemb and size
+would result in integer overflow, then calloc() returns an error.  By
+contrast,  an integer overflow would not be detected in the following
+call to malloc(), with the result that an incorrectly sized block  of
+memory would be allocated:
+
+   malloc(nmemb * size);
+```
+
+# La suppression de clé
+
+* Cas simples: le noeud à supprimer et est feuill ou a un seul fils.
+* Comment faites-vous?
+
+. . .
+
+::: columns
+
+:::: column
+
+Une feuille (le 19 p.ex.).
+
+```{.mermaid format=pdf width=400 loc=figs/}
+flowchart TB;
+    10-->20;
+    10-->5
+    20-->21
+    20-->19
+```
+
+::::
+
+:::: column
+
+Un seul fils (le 20 p.ex.).
+
+```{.mermaid format=pdf width=400 loc=figs/}
+flowchart TB;
+    10-->20;
+    10-->5
+    20-->25
+    20-->18
+    25-->24
+    25-->30
+    5-->4;
+    5-->8;
+    style 18 fill:#fff,stroke:#fff,color:#fff
+```
+
+::::
+
+:::
+
+# La suppression de clé
+
+## Cas compliqué
+
+::: columns
+
+:::: column
+
+* Le noeud à supprimer à (au moins) deux descendants (10).
+
+```{.mermaid format=pdf width=400 loc=figs/}
+flowchart TB;
+    10-->20;
+    10-->5
+    20-->25
+    20-->18
+    25-->24
+    25-->30
+    5-->4;
+    5-->8;
+```
+
+::::
+
+:::: column
+
+* Si on enlève 10 il se passe quoi?
+* On peut pas juste enlever `10` et recoller...
+* Proposez une solution bon sang!
+
+::::
+
+:::
+