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