Les arbres (n
Transcription
Les arbres (n
Les arbres (n-aires) permettent le stockage de données ayant une structure hiérarchique bases de données hiérarchiques, arborescences, systèmes de fichiers (Unix, Dos, Windows x.x, Windows 95 avec Fat) font sauter les limites des arbres binaires ont des variantes intéressantes : B-arbres, ... jeudi 21 octobre 2004 Arbres n-aires 1 Dans un arbre n-aire Chaque sommet peut avoir 0 à n successeurs («fils») S’il n’a pas de successeur, c’est une «feuille» Chaque sommet (excepté la «racine») a un prédécesseur («père») jeudi 21 octobre 2004 Arbres n-aires 2 Fonctionnalités Ajout d’une nouvelle information dans un nouveau sommet, fils d’un sommet donné Recherche d’une information à partir d’une clef donnée (plusieurs modes de parcours au choix) toutes les fonctions habituelles sur les structures de données : sauvegarde, restauration, ... jeudi 21 octobre 2004 Arbres n-aires 3 Les implémentations lorsque n est fixe (connu d’avance) en généralisant les arbres binaires ) chaque sommet comporte un tableau de n pointeurs vers ses successeurs, ou un tableau de n sous-arbres (point de vue récursif) en généralisant les ABR ) chaque sommet comporte n-1 valeurs v1, ..., vn-1et n pointeurs p1, ..., pn.. Pi pointe sur le sous-arbre dont les valeurs sont comprises entre vi-1 et vi jeudi 21 octobre 2004 Arbres n-aires 4 Les implémentations Lorsque n n'est pas fixe, ou pour éviter les pertes de place chaque sommet comporte un pointeur vers son premier fils et vers son frère Dans tous les cas, il est possible d'ajouter un pointeur vers le sommet père, utile dans les algorithmes qui ne partent pas de la racine. jeudi 21 octobre 2004 Arbres n-aires 5 Avec n non fixe Implémentation Arbre voulu jeudi 21 octobre 2004 Arbres n-aires 6 Une classe de base possible #include "objet.h" class Arbre{ protected : Objet valeur; Arbre * filsaine; Arbre * frere; Arbre * pere; private : Arbre (const Arbre &); public : Arbre () { valeur = objetVide(); filsaine = frere = pere = NULL;} virtual ~Arbre() { if (filsaine) delete filsaine; if (frere) delete frere; } virtual const Objet & recherche(const Clef &) const = 0; }; méthode virtuelle pure jeudi 21 octobre 2004 Arbres n-aires 7 Pour rechercher... #include "arbre.h" class RechercheArbre : public Arbre { public : const Objet & recherche (const Clef &) const; }; const Objet & RechercheArbre::recherche (const Clef & laClef) const{ if (valeur == objetVide()) return objetVide(); if (valeur.donneClef() == laClef) return valeur; const Objet & ref = frere -> recherche(laClef); if (! ref.estVide()) return ref; return (*filsaine).recherche(laClef); } jeudi 21 octobre 2004 Arbres n-aires 8