Skip to content
Snippets Groups Projects
Commit 7ad83607 authored by paul.albuquer's avatar paul.albuquer
Browse files

Corrected typos in binary tree part

parent 471f0334
No related branches found
No related tags found
No related merge requests found
Pipeline #38084 passed
...@@ -227,15 +227,15 @@ void hm_print(hm h); ...@@ -227,15 +227,15 @@ void hm_print(hm h);
## Plus sérieusement ## Plus sérieusement
* Ensemble de **nœuds** et d'**arêtes** (graphe), * Ensemble de **nœuds** et d'**arêtes** (graphe).
* Les arêtes relient les nœuds entre eux, mais pas n'importe comment: chaque * Les arêtes relient les nœuds entre eux, mais pas n'importe comment: chaque
nœud a au plus un **parent**, nœud a au plus un **parent**.
* Le seul nœud sans parent est la **racine**, * Le seul nœud sans parent est la **racine**.
* Chaque nœud a un nombre fini d'**enfants**, * Chaque nœud a un nombre fini d'**enfants**.
* La hiérarchie des nœuds rend les arêtes **orientées** (parent -> enfants), et empêche les * La hiérarchie des nœuds rend les arêtes **orientées** (parent -> enfants), et empêche les
**cycles** (acyclique, orienté). **cycles** (acyclique, orienté).
* La **feuille** ou **nœud terminal** est un nœud sans enfants, * La **feuille** ou **nœud terminal** est un nœud sans enfants.
* Le **niveau** est 1 à la racine et **niveau+1** pour les enfants, * Le **niveau** est 1 à la racine et **niveau+1** pour les enfants.
* Le **degré** d'un nœud est le nombre de enfants du nœud. * Le **degré** d'un nœud est le nombre de enfants du nœud.
. . . . . .
...@@ -363,11 +363,11 @@ graph TD; ...@@ -363,11 +363,11 @@ graph TD;
::: :::
* Les nœuds de degré 0, sont des feuilles. * Les nœuds de degré 0 sont des feuilles.
# Application: recherche rapide # Application: recherche rapide
## Pouvez vous construire un arbre pour résoudre le nombre secret? ## Pouvez-vous construire un arbre pour résoudre le nombre secret?
. . . . . .
...@@ -399,7 +399,7 @@ graph LR; ...@@ -399,7 +399,7 @@ graph LR;
::: :::
# Autres représentation # Autres représentations
* Botanique * Botanique
* **Exercice:** Ajouter les degrés/niveaux et feuilles * **Exercice:** Ajouter les degrés/niveaux et feuilles
...@@ -418,7 +418,7 @@ graph TD; ...@@ -418,7 +418,7 @@ graph TD;
H-->K; H-->K;
``` ```
# Autres représentation # Autres représentations
* Ensembliste * Ensembliste
...@@ -448,7 +448,7 @@ graph TD; ...@@ -448,7 +448,7 @@ graph TD;
::: :::
# Autres représentation # Autres représentations
* Liste * Liste
...@@ -541,11 +541,11 @@ A ...@@ -541,11 +541,11 @@ A
# L'arbre binaire # L'arbre binaire
* Structure de données abstraite, * Structure de données abstraite.
* Chaque nœud a au plus deux enfants: gauche et droite, * Chaque nœud a au plus deux enfants: gauche et droite.
* Chaque enfants est un arbre. * Chaque enfant est un arbre.
## Comment représenteriez vous une telle structure? ## Comment représenteriez-vous une telle structure?
. . . . . .
...@@ -583,7 +583,7 @@ typedef struct _node { ...@@ -583,7 +583,7 @@ typedef struct _node {
## Interface minimale ## Interface minimale
* Qu'y mettriez vous? * Qu'y mettriez-vous?
. . . . . .
...@@ -627,7 +627,7 @@ graph TD; ...@@ -627,7 +627,7 @@ graph TD;
## Remarques ## Remarques
* L'arbre est **hétérogène**: le genre d'info est pas le même sur chaque nœud * L'arbre est **hétérogène**: le genre d'info n'est pas le même sur chaque nœud
(opérateur, opérande). (opérateur, opérande).
* Les feuilles contiennent les opérandes. * Les feuilles contiennent les opérandes.
* Les nœuds internes contiennent les opérateurs. * Les nœuds internes contiennent les opérateurs.
...@@ -638,14 +638,13 @@ graph TD; ...@@ -638,14 +638,13 @@ graph TD;
# Parcours d'arbres binaires # Parcours d'arbres binaires
* Appliquer une opération à tous les nœuds de l'arbre, * Appliquer une opération à tous les nœuds de l'arbre:
* Nécessité de **parcourir** l'arbre, * Nécessité de **parcourir** l'arbre.
* Utiliser uniquement l'interface: visiter, gauche, * Utiliser uniquement l'interface: visiter, gauche, droite
droite.
## Une idée de comment parcourir cet arbre? ## Une idée de comment parcourir cet arbre?
* 3 parcours (R: Racine, G: sous-arbre gauche, D: sous-arbre droit): * 3 parcours (R: racine, G: sous-arbre gauche, D: sous-arbre droit):
::: columns ::: columns
...@@ -679,16 +678,16 @@ graph TD; ...@@ -679,16 +678,16 @@ graph TD;
# Le parcours infixe (G, R, D) # Le parcours infixe (G, R, D)
* Gauche, Racine, Droite: * Gauche, Racine, Droite:
1. On descend dans l'arbre de gauche tant qu'il est pas vide, 1. On descend dans l'arbre de gauche tant qu'il n'est pas vide.
2. On visite la racine du sous arbre, 2. On visite la racine du sous-arbre.
3. On descend dans le sous-arbre de droite (s'il est pas vide), 3. On descend dans le sous-arbre de droite (s'il n'est pas vide).
4. On recommence. 4. On recommence.
. . . . . .
## Incompréhensible? ## Incompréhensible?
* La récursivité c'est la vie. * La récursivité, c'est la vie.
``` ```
parcours_infixe(arbre a) parcours_infixe(arbre a)
...@@ -723,11 +722,11 @@ graph TD; ...@@ -723,11 +722,11 @@ graph TD;
``` ```
parcours_infixe(arbre a) parcours_infixe(arbre a)
si est_pas_vide(gauche(a)) si est_pas_vide(gauche(a))
parcours_infixe(gauche(a)) parcours_infixe(gauche(a))
visiter(A) visiter(A)
si est_pas_vide(droite(A)) si est_pas_vide(droite(A))
parcours_infixe(droite(A)) parcours_infixe(droite(A))
``` ```
:::: ::::
...@@ -774,11 +773,11 @@ graph TD; ...@@ -774,11 +773,11 @@ graph TD;
``` ```
parcours_infixe(arbre a) parcours_infixe(arbre a)
si est_pas_vide(gauche(a)) si est_pas_vide(gauche(a))
parcours_infixe(gauche(a)) parcours_infixe(gauche(a))
visiter(A) visiter(A)
si est_pas_vide(droite(A)) si est_pas_vide(droite(A))
parcours_infixe(droite(A)) parcours_infixe(droite(A))
``` ```
## Remarque ## Remarque
...@@ -843,18 +842,17 @@ void tree_print(tree_t tree, int n) { ...@@ -843,18 +842,17 @@ void tree_print(tree_t tree, int n) {
``` ```
parcours_infixe(arbre a) parcours_infixe(arbre a)
si est_pas_vide(gauche(a)) si est_pas_vide(gauche(a))
parcours_infixe(gauche(a)) parcours_infixe(gauche(a))
visiter(A) visiter(A)
si est_pas_vide(droite(A)) si est_pas_vide(droite(A))
parcours_infixe(droite(A)) parcours_infixe(droite(A))
``` ```
# Correction # Correction
\footnotesize \footnotesize
* Les deux parcours sont des modifications **triviales**[^2] de l'algorithme * Les deux parcours sont des modifications **triviales**[^2] de l'algorithme infixe.
infixe.
## Le parcours postfixe ## Le parcours postfixe
...@@ -970,7 +968,7 @@ sous-arbres de gauche et de droite. ...@@ -970,7 +968,7 @@ sous-arbres de gauche et de droite.
```python ```python
arbre recherche(clé, arbre) arbre recherche(clé, arbre)
tante_que est_non_vide(arbre) tant_que est_non_vide(arbre)
si clé < clé(arbre) si clé < clé(arbre)
arbre = gauche(arbre) arbre = gauche(arbre)
sinon si clé > clé(arbre) sinon si clé > clé(arbre)
...@@ -997,9 +995,9 @@ typedef node* tree_t; ...@@ -997,9 +995,9 @@ typedef node* tree_t;
tree_t search(key_t key, tree_t tree) { tree_t search(key_t key, tree_t tree) {
tree_t current = tree; tree_t current = tree;
while (NULL != current) { while (NULL != current) {
if (current->key > X) { if (current->key > key) {
current = current->gauche; current = current->gauche;
} else if (current->key < X){ } else if (current->key < key){
current = current->droite; current = current->droite;
} else { } else {
return current; return current;
...@@ -1021,7 +1019,7 @@ qui retourne le nombre total de nœuds d'un arbre et poster le résultat sur ...@@ -1021,7 +1019,7 @@ qui retourne le nombre total de nœuds d'un arbre et poster le résultat sur
matrix. matrix.
Indication: la taille, est 1 + le nombre de nœuds du sous-arbre de gauche Indication: la taille, est 1 + le nombre de nœuds du sous-arbre de gauche
additionné au nombre de nœuds dans le sous-arbre de droite. additionné au nombre de nœuds du sous-arbre de droite.
. . . . . .
...@@ -1031,14 +1029,14 @@ int arbre_size(tree_t tree) { ...@@ -1031,14 +1029,14 @@ int arbre_size(tree_t tree) {
return 0; return 0;
} else { } else {
return 1 + tree_size(tree->left) return 1 + tree_size(tree->left)
+ tree_size(tree->right); + tree_size(tree->right);
} }
} }
``` ```
# L'insertion dans un arbre binaire # 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.... pas construire l'arbre....
## Pour un arbre lexicographique ## Pour un arbre lexicographique
...@@ -1051,9 +1049,9 @@ int arbre_size(tree_t tree) { ...@@ -1051,9 +1049,9 @@ int arbre_size(tree_t tree) {
* Clés uniques pour simplifier. * Clés uniques pour simplifier.
* Insertion de 5, 15, 10, 25, 2, -5, 12, 14, 11. * Insertion de 5, 15, 10, 25, 2, -5, 12, 14, 11.
* Rappel: * Rappel:
* Plus petit que la clé courante => gauche, * Plus petit que la clé courante => à gauche,
* Plus grand que la clé courante => droite. * Plus grand que la clé courante => à droite.
* Faisons le dessins ensemble * Faisons le dessin ensemble
``` ```
...@@ -1128,8 +1126,9 @@ ajout(arbre, clé) ...@@ -1128,8 +1126,9 @@ ajout(arbre, clé)
tree_t position(tree_t tree, key_t key) { tree_t position(tree_t tree, key_t key) {
tree_t current = tree; tree_t current = tree;
if (NULL != current) { if (NULL != current) {
tree_t subtree = key > current->key ? current->right : tree_t subtree
current->left; = key > current->key
? current->right : current->left;
while (key != current->key && NULL != subtree) { while (key != current->key && NULL != subtree) {
current = subtree; current = subtree;
subtree = key > current->key ? current->right : subtree = key > current->key ? current->right :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment