Podcast
Questions and Answers
Quel est le type de mytree.root ?
Quel est le type de mytree.root ?
Quel type de valeur peut représenter 'T' dans la définition d'un noeud ?
Quel type de valeur peut représenter 'T' dans la définition d'un noeud ?
Quelle est la hauteur d'un arbre vide ?
Quelle est la hauteur d'un arbre vide ?
Comment calcule-t-on la hauteur d'un arbre non vide ?
Comment calcule-t-on la hauteur d'un arbre non vide ?
Signup and view all the answers
Que doit-on faire pour provoquer le premier appel récursif lors de la manipulation d'un arbre ?
Que doit-on faire pour provoquer le premier appel récursif lors de la manipulation d'un arbre ?
Signup and view all the answers
Quelle est la caractéristique d'un nœud terminal dans un arbre ?
Quelle est la caractéristique d'un nœud terminal dans un arbre ?
Signup and view all the answers
Comment est définie la hauteur d'un arbre ?
Comment est définie la hauteur d'un arbre ?
Signup and view all the answers
Quel est le type de valeur stockée dans les nœuds de l'arbre dans le contenu donné ?
Quel est le type de valeur stockée dans les nœuds de l'arbre dans le contenu donné ?
Signup and view all the answers
Quelle déclaration est vraie concernant les arbres et la récursivité ?
Quelle déclaration est vraie concernant les arbres et la récursivité ?
Signup and view all the answers
Quel est l'ordre de visites dans un parcours en profondeur préfixe ?
Quel est l'ordre de visites dans un parcours en profondeur préfixe ?
Signup and view all the answers
Quel type de structure de données est utile pour un parcours itératif des arbres ?
Quel type de structure de données est utile pour un parcours itératif des arbres ?
Signup and view all the answers
Dans le processus de recherche d'un nœud dans un arbre, quel cas serait traité en premier dans un parcours infixe ?
Dans le processus de recherche d'un nœud dans un arbre, quel cas serait traité en premier dans un parcours infixe ?
Signup and view all the answers
Quelle est la fonction principale de l'algorithme processNode() dans un arbre binaire ?
Quelle est la fonction principale de l'algorithme processNode() dans un arbre binaire ?
Signup and view all the answers
Quel est le résultat d'un parcours postfixe sur un arbre binaire ?
Quel est le résultat d'un parcours postfixe sur un arbre binaire ?
Signup and view all the answers
Que fait l'algorithme addRandomNode lorsqu'il rencontre un arbre vide ?
Que fait l'algorithme addRandomNode lorsqu'il rencontre un arbre vide ?
Signup and view all the answers
Lors de l'ajout d'un nœud, quel est le premier test effectué par l'algorithme ?
Lors de l'ajout d'un nœud, quel est le premier test effectué par l'algorithme ?
Signup and view all the answers
Quelle condition indique que l'endroit pour insérer un nœud est libre ?
Quelle condition indique que l'endroit pour insérer un nœud est libre ?
Signup and view all the answers
Comment l'algorithme décide-t-il de la direction (gauche ou droite) pour insérer un nœud ?
Comment l'algorithme décide-t-il de la direction (gauche ou droite) pour insérer un nœud ?
Signup and view all the answers
Que se passe-t-il si l'emplacement à droite de temp n'est pas libre ?
Que se passe-t-il si l'emplacement à droite de temp n'est pas libre ?
Signup and view all the answers
Study Notes
Prérequis
- Maîtriser les structures et les pointeurs
- Savoir représenter visuellement les structures de données
- Implémentation des piles et des files
Objectifs
- Définir le type
t_node
, utiliser le typet_node*
- Définir le type
t_tree
- Implémenter les algorithmes classiques d'arbres de manière récursive
- Parcours en largeur et en profondeur d'arbres
Organisation
- 1 cours (2h)
- 1 séance d'exercices (2h)
- 1 session de TP (3h)
Structures d'arbres
- Ressemblance aux listes: chaque élément pointe vers le suivant
- Arbre binaire: chaque élément pointe vers deux autres nœuds
- Représentation de haut en bas
Le type t_node
- Un nœud est semblable à une cellule de liste, mais stocke deux pointeurs.
- Les pointeurs sont nommés
left
etright
pour faciliter la visualisation. - Définition du type
t_node
:typedef struct s_node { struct s_node *left; T value; // T est un type quelconque (int, float, etc.) struct s_node *right; } t_node;
Représentation d'un nœud
- Représentation standard:
left value right
- Représentation compacte:
value left right
- Représentation symbolique (plus facile à lire, mais pas explicite des pointeurs)
Similarités avec les cellules d'une liste
- Créer un nœud via un algorithme réutilisable (
createNode()
) - L'algorithme doit prendre une valeur comme paramètre.
- Retourner un pointeur vers un nœud (type
t_node*
).
Le type t_tree
- Une structure contenant un pointeur vers le nœud racine de l'arbre.
- La racine est le premier nœud de l'arbre.
- Définition du type
t_tree
:typedef struct s_tree { t_node *root; } t_tree;
Représentation des arbres non vides
- Certains nœuds ont des enfants (
left
etright
). - Certains nœuds n'ont qu'un seul enfant (
left
ouright
). - Certains nœuds n'ont pas d'enfant (
left
etright
sontNULL
). Ces nœuds sont appelés feuilles.
Définitions standards
- La profondeur d'un nœud est la distance à la racine.
- La hauteur d'un arbre est la profondeur maximale de ses nœuds.
Récursivité et arbres
- La récursivité est un moyen naturel d'effectuer des opérations sur les arbres.
- Cette méthode est simple et efficace pour les opérations sur les arbres.
Définition récursive d'un arbre - sous-arbres
- La variable
mytree
est de typet_tree
. -
mytree.root
ettemp
sont tous deux de typet_node*
. - Cela permet la récursivité (comme pour les listes).
- Ecrire une fonction récursive pour le type
t_node*
. - Pour
mytree
, le premier appel récursif sera avecmytree.root
.
Un exemple : la fonction height()
- Calculer la hauteur d'un arbre.
- Si l'arbre est vide, sa hauteur est -1.
- Sinon, la hauteur est 1 + le maximum entre les hauteurs des sous-arbres gauche et droit.
Exemples
- La hauteur de
mytree
est la hauteur de son champroot
. - Si
mytree.root
estNULL
, la hauteur est -1. - Calculer la hauteur d'un noeud (
t_node*
).
Algorithme récursif height()
- Étape 1: Calculer la hauteur d'un nœud (
t_node*
). - Si le pointeur est
NULL
, la hauteur est -1. - Sinon, c'est 1 + le maximum entre la hauteur du sous-arbre gauche et la hauteur du sous-arbre droit.
- Retourner cette hauteur.
- Écrire l'algorithme
nodeHeight()
. - Que doit retourner cet algorithme ? Une valeur entière.
-
t_node*
est-il modifié lors du calcul de sa hauteur ? Non.
Algorithme récursif Height() (entête)
- Algorithme
nodeHeight(p_node: t_node*): entier
.
La suite
- Si
p_node
estNULL
, la hauteur est -1. - Sinon, la hauteur est 1 + le maximum des hauteurs des sous-arbres gauche et droit.
Compter le nombre de nœuds dans un arbre binaire
- Algorithme récursif
nodeCount()
à voir en TD/TP.
Créer un arbre binaire aléatoire
- L'algorithme
EmptyTree()
initialise un arbre vide. - Créer un nouveau nœud et choisir un emplacement aléatoire pour l'insérer dans l'arbre.
L'algorithme addRandomNode()
- Prend une valeur de type
char
et un arbre (t_tree*
) en paramètres. - Modifie l'arbre si nécessaire (met à jour
root
si l'arbre est vide).
Visualisation
- Décrire l'algorithme
addRandomNode()
.- Créer un nouveau nœud.
- Trouver un emplacement dans l'arbre.
- Insérer le nouveau nœud à l'emplacement trouvé.
Parcourir un arbre
- Plusieurs modes de parcours d'arbres existent.
- Pour les listes, un seul parcours est possible (en avant).
- Pour les arbres, la récursivité est souvent utilisée.
Schéma général de récursivité
- Algorithme récursif
processNode()
pour effectuer une opération sur les nœuds. - Appel récursif pour les enfants gauche et droit.
Parcours en profondeur
- La récursivité précédente décrit un parcours en profondeur.
- Il existe 3 types importants: préfixe, infixe, postfixe.
Illustration
- Exemple d'arbre binaire (
mytree
).
Parcours préfixe
- Algorithme
prefixTraversal()
: afficher la valeur du nœud courant, puis gérer les sous-arbres (left
,right
).
Parcours postfixe
- Algorithme
postfixTraversal()
: gérer les sous-arbres (left
,right
), puis afficher la valeur du nœud courant.
###Parcours infixe
- Algorithme
infixTraversal()
: gérer le sous-arbre gauche, afficher la valeur du nœud courant, puis gérer le sous-arbre droit.
Catégories d'arbres binaires
- Arbre strict/localement complet : chaque nœud a soit 0 soit 2 enfants.
- Arbre binaire complet : tous les niveaux sont remplis sauf le dernier, où les feuilles sont alignées à gauche.
- Arbre parfait : tous les niveaux sont pleins.
- Arbre dégénéré : chaque nœud a au plus un enfant (comme une liste chaînée).
Parcours en largeur
- Parcours itératif.
- Une structure de données (file) est utilisée pour stocker les nœuds à visiter au prochain niveau.
Arbres binaires de recherche (BST)
- Caractéristique : les valeurs du sous-arbre gauche sont inférieures à la valeur du nœud courant, et les valeurs du sous-arbre droit sont supérieures.
Insertion d'une nouvelle valeur dans une BST
- Décrire comment insérer une nouvelle valeur dans un arbre binaire de recherche.
- L'insertion se fait toujours en tant que feuille.
BST vs ordre d'insertion/équilibrage d'arbre
- Plusieurs BST peuvent stocker les mêmes valeurs.
- L'ordre d'insertion affecte la structure de l'arbre.
- Des techniques d'équilibrage peuvent améliorer la performance de la recherche.
Algorithme d'insertion de la BST
- Algorithme pour insérer une nouvelle valeur dans un arbre binaire de recherche.
- Parcourir l'arbre pour trouver l'emplacement approprié.
- Insérer le nouveau noeud qui devient une nouvelle feuille.
Exemples de programmes
- Exemples de codes (Python ou C++).
Problèmes de complexité des BST
- Complexité de recherche.
- Meilleur cas (arbre équilibré), recherche efficace (complexité logarithmique).
- Pire cas (arbre dégénéré): recherche linéaire (complexité linéaire).
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Testez vos connaissances sur les arbres en informatique avec ce quiz détaillé. Explorez des concepts tels que la récursivité, la hauteur des arbres et les parcours. Parfait pour les étudiants en informatique et les passionnés d'algorithmes.