Quiz sur les Arbres en Informatique
19 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Quel est le type de mytree.root ?

  • t_node * (correct)
  • struct s_node *
  • t_tree *
  • int *

Quel type de valeur peut représenter 'T' dans la définition d'un noeud ?

  • Seulement des entiers
  • Seulement des flottants
  • Un type générique tel que int ou float (correct)
  • Des chaînes de caractères uniquement

Quelle est la hauteur d'un arbre vide ?

  • 1
  • -1 (correct)
  • undefined
  • 0

Comment calcule-t-on la hauteur d'un arbre non vide ?

<p>1 + le maximum entre la hauteur de l'arbre gauche et de l'arbre droit (B)</p> Signup and view all the answers

Que doit-on faire pour provoquer le premier appel récursif lors de la manipulation d'un arbre ?

<p>Utiliser mytree.root comme argument (D)</p> Signup and view all the answers

Quelle est la caractéristique d'un nœud terminal dans un arbre ?

<p>Il n'a pas d'enfants. (D)</p> Signup and view all the answers

Comment est définie la hauteur d'un arbre ?

<p>C'est la profondeur maximale parmi tous ses nœuds. (C)</p> 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é ?

<p>char (B)</p> Signup and view all the answers

Quelle déclaration est vraie concernant les arbres et la récursivité ?

<p>La récursivité est un moyen naturel d'exprimer les opérations sur les arbres. (A)</p> Signup and view all the answers

Quel est l'ordre de visites dans un parcours en profondeur préfixe ?

<p>Visiter le nœud, puis le nœud gauche, puis le nœud droit (D)</p> Signup and view all the answers

Quel type de structure de données est utile pour un parcours itératif des arbres ?

<p>Files (C)</p> 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 ?

<p>Visiter le nœud gauche (A)</p> Signup and view all the answers

Quelle est la fonction principale de l'algorithme processNode() dans un arbre binaire ?

<p>Effectuer une opération sur chaque nœud (D)</p> Signup and view all the answers

Quel est le résultat d'un parcours postfixe sur un arbre binaire ?

<p>Visiter les enfants avant le nœud (D)</p> Signup and view all the answers

Que fait l'algorithme addRandomNode lorsqu'il rencontre un arbre vide ?

<p>Il insère le nouveau nœud comme racine de l'arbre. (A)</p> Signup and view all the answers

Lors de l'ajout d'un nœud, quel est le premier test effectué par l'algorithme ?

<p>Tester si l'arbre est vide. (B)</p> Signup and view all the answers

Quelle condition indique que l'endroit pour insérer un nœud est libre ?

<p>temp-&gt;right == NULL (A)</p> 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 ?

<p>En tirant aléatoirement entre 0 et 1. (D)</p> Signup and view all the answers

Que se passe-t-il si l'emplacement à droite de temp n'est pas libre ?

<p>L'algorithme se déplace à l'endroit à droite. (D)</p> Signup and view all the answers

Flashcards

Type d'arbre (t_tree)

Un type de données représentant une structure de données arborescente en mémoire. Il contient un pointeur vers la racine de l'arbre.

Feuille d'un arbre

Un nœud dans un arbre qui n'a aucun enfant. Il représente la fin d'une branche de l'arbre.

Profondeur d'un nœud

La distance d'un nœud à la racine de l'arbre. Chaque niveau de l'arbre a une profondeur différente.

Hauteur d'un arbre

La profondeur maximale parmi tous les nœuds d'un arbre. Elle correspond au nombre de niveaux de l'arbre.

Signup and view all the flashcards

Récursivité et arbres

La récursivité est un moyen naturel pour exprimer les opérations sur les arbres. Cela implique de briser un problème en sous-problèmes similaires.

Signup and view all the flashcards

Parcours préfixe

Un parcours en profondeur d'un arbre binaire où le nœud courant est traité avant ses sous-arbres gauche et droit.

Signup and view all the flashcards

Parcours infixe

Un parcours en profondeur d'un arbre binaire où le nœud courant est traité après son sous-arbre gauche, mais avant son sous-arbre droit.

Signup and view all the flashcards

Parcours postfixe

Un parcours en profondeur d'un arbre binaire où le nœud courant est traité après ses sous-arbres gauche et droit.

Signup and view all the flashcards

Parcours d'un arbre

Le traitement des nœuds d'un arbre en suivant une séquence particulière.

Signup and view all the flashcards

Parcours en profondeur

Un type de parcours d'arbre où les nœuds sont traités dans un ordre descendant, du nœud racine vers les feuilles.

Signup and view all the flashcards

La récursivité

C'est une fonction qui s'appelle elle-même.

Signup and view all the flashcards

Définition récursive d'un arbre

Un arbre peut être représenté par un pointeur vers sa racine (t_node*) et chaque nœud possède deux pointeurs vers ses sous-arbres gauche (left) et droit (right).

Signup and view all the flashcards

Calculer la hauteur d'un arbre

La hauteur d'un arbre vide est -1. Si l'arbre n'est pas vide, sa hauteur est 1 + le maximum entre la hauteur de son sous-arbre gauche et la hauteur de son sous-arbre droit.

Signup and view all the flashcards

Calculer la hauteur d'un noeud

La hauteur d'un noeud est -1 si le pointeur est NULL, sinon c'est 1 + le maximum entre la hauteur du sous-arbre gauche et la hauteur du sous-arbre droit.

Signup and view all the flashcards

Ecrire une fonction récursive pour les arbres

Pour écrire une fonction récursive pour les arbres, il faut d'abord écrire une fonction récursive pour le type t_node*. Ensuite, pour un arbre mytree, le premier appel récursif se fait avec mytree.root.

Signup and view all the flashcards

addRandomNode()

L'algorithme addRandomNode() ajoute un nouveau nœud à un arbre binaire de manière aléatoire. L'algorithme prend en entrée un pointeur vers la racine de l'arbre (p_tree) et la valeur du nœud à ajouter (val).

Signup and view all the flashcards

Création du nouveau nœud (p_nouv)

La première étape de l'algorithme consiste à créer un nouveau nœud (p_nouv) avec la valeur spécifiée (val).

Signup and view all the flashcards

Vérification de l'emplacement libre à droite

La condition temp->right == NULL est utilisée pour vérifier si l'emplacement à droite du nœud courant (temp) est disponible pour l'insertion du nouveau nœud.

Signup and view all the flashcards

Utilisation d'un curseur (temp)

L'algorithme utilise un curseur (temp) pour naviguer dans l'arbre binaire. Ce curseur est initialisé en pointant vers la racine de l'arbre (p_tree->root).

Signup and view all the flashcards

Génération aléatoire de la direction

Lors de l'ajout d'un nouveau nœud, l'algorithme utilise la génération de nombres aléatoires pour déterminer la direction de l'ajout (gauche ou droite).

Signup and view all the flashcards

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 type t_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 et right 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 et right).
  • Certains nœuds n'ont qu'un seul enfant (left ou right).
  • Certains nœuds n'ont pas d'enfant (left et right sont NULL). 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 type t_tree.
  • mytree.root et temp sont tous deux de type t_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 avec mytree.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 champ root.
  • Si mytree.root est NULL, 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 est NULL, 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.

Quiz Team

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.

More Like This

Tree Data Structures Quiz
10 questions
Tree Data Structures Quiz
10 questions

Tree Data Structures Quiz

AltruisticChocolate avatar
AltruisticChocolate
Counting Nodes in a Binary Tree
24 questions
09: Alberi
43 questions

09: Alberi

SteadyBoltzmann avatar
SteadyBoltzmann
Use Quizgecko on...
Browser
Browser