RECURSIVITE ARBRES BINAIRES

Slides:



Advertisements
Présentations similaires
Structures de données avancées : Principales structures de données
Advertisements


Chapitre 3 Les arbres binaires
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
Chap. 1 Structures séquentielles : listes linéaires
Chapitre 3 (fin). Les arbres AVL
Cours 8 Arbres équilibrés
ALGORITHMES RECURSIFS
Structures de données linéaires
Cours d’Algorithmique
LOGO Responsable du cours Mlle Amina GHRAB : 1 ère année IAG Institut Supérieur de Gestion de Tunis.
Les structures de données arborescentes
Arbre binaire de recherche
IFT-2000: Structures de Données
Chapitre VII. Tri Tri par tas Tri rapide.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les fichiers indexés (Les B-arbres)
LES ARBRES IUP 2 Génie Informatique
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Structures de données IFT-2000
Structures de données IFT-2000
/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.
IFT Structures de données
Présentation Structures de Données et TDA
Les arbres binaires.
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Les adresses et les pointeurs
Les arbres et tas binomiaux
Exposé en structures de données
IFT-2000: Structures de données Piles et files Dominic Genest, 2009.
IV. Arbres  Arbre binaire (AB) Représentation SDD d’un AB
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
LES ARBRES Un arbre est une structure homogène dont chaque élément,
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009.
Heuristiques C. Recherche de la meilleure branche . Branch And Bound
Le langage C Structures de données
1 Exemples Construction et implantation de types de données abstraits.
Ch. PAUL - Piles et Files à l'aide de listes chainées
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
LES PILES ET FILES.
Université Mohammed V-Agdal École Supérieure de Technologie Salé
et quelques rappels sur certains éléments du langage C
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
MIGO ET COMPLEXITE1 ARBRES EQUILIBRES Définition : On dit qu’un arbre binaire est H équilibré si en tout nœud de l’arbre, les hauteurs des sous-arbres.
Structures de données élémentaires dans le contexte du TP #1
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
Structures de données avancées : Arbres ‘Left Leaning Red-Black’
Structures de données avancées : Arbres AA
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Algorithmique et Conception Objet
6ième Classe (Mercredi, 17 novembre) CSI2572
B.Shishedjiev - Modèle relationnel
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
Arbres AVL - Hauteur d’un arbre AVL - Insertion et restructuration
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
. Le B-Arbre.
Les arbres Arbres binaires
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

RECURSIVITE ARBRES BINAIRES Insertion, Parcours pré, post et in ordre, Recherche, Suppression. Ch. PAUL Algorithmique – Arbres binaires 1

ARBRE BINAIRE DEFINITION RECURSIVE Les arbres binaires sont des arbres dont les nœuds n’acceptent que deux fils au maximum. Un arbre binaire est : - soit un arbre vide (NULL en C) - soit un triplet (I,G,D) constitué d’une racine I et de deux arbres binaires : G (fils gauche) D (fils droit). Les arbres binaires sont des structures utilisées pour le classement et l'accès rapide aux données 5 3 8 1 4 9 Ch. PAUL Algorithmique – Arbres binaires 2

ARBRE BINAIRE ORDONNE On ne s'intéressera qu'aux arbres binaires ordonnés : Tout élément à gauche de la racine est inférieur à la valeur de la racine, Tout élément à droite de la racine est supérieur à la valeur de la racine. Cette propriété doit être vérifiée récursivement à tous les niveaux pour que l'arbre binaire soit dit ordonné. 5 3 8 1 4 9 Ch. PAUL Algorithmique – Arbres binaires 3

NOEUD* CreerNoeud(void) DONNEES MANIPULEES typedef struct noeud { char info[32] ; struct noeud* gauche; struct noeud * droit; } NOEUD ; La création d’un nouveau nœud est une fonction indépendante : NOEUD* CreerNoeud(void) Elle est appelée avant l’appel de la fonction d’insertion. Ch. PAUL Algorithmique – Arbres binaires 4

INSERTION A LA BONNE PLACE PRINCIPE RECURSIF L’insertion d’une nouvelle information donne lieu à la création d’un nœud. La fonction d’insertion réclame donc 2 paramètres : NOEUD* AjNoeud(NOEUD *R, NOEUD *N) - R est le nœud courant (la racine au début) - N est le nœud crée précédemment, - Elle retourne la nouvelle adresse du nœud courant (qui n’a changé qu’en cas d’insertion). Ch. PAUL Algorithmique – Arbres binaires 5

CREATION D'UN NOEUD NOEUD* CreerNoeud(void) { NOEUD* N=(NOEUD *)malloc(sizeof(NOEUD)); if (N == NULL) { printf("\nErreur allocation memoire sortie"); return NULL; } printf("\nDonner un mot"); scanf("%s", N->info); N->gauche = NULL; N->droit = NULL; return N; } /* fin CreerNoeud */ Attention : la création d'un noeud doit se faire en dehors de l'insertion récursive Ch. PAUL Algorithmique – Arbres binaires 6

INSERTION A LA BONNE PLACE NOEUD* AjNoeud(NOEUD *R, NOEUD *N) { if (R == NULL) return N; if (strcmp(N->info,R->info)<0) R->gauche = AjNoeud(R->gauche,N); else if (strcmp(N->info,R->info)>0) R->droit = AjNoeud(R->droit, N); { printf("\nLe mot existe, pas d'ajout"); free(N); } return R; } /* fin AjNoeud */ Ch. PAUL Algorithmique – Arbres binaires 7

PARCOURS PRE-ORDRE void ParcoursPre(NOEUD *R) { ? if (R != NULL) printf("\n%s", R->info); ParcoursPre(R->gauche); ParcoursPre(R->droit); } } /* fin ParcoursPre */ ? Ch. PAUL Algorithmique – Arbres binaires 8

PARCOURS PRE-ORDRE : AFFICHAGE 1 2 5 3 4 6 Parcours en pré-ordre : le traitement (printf) se fait avant les appels récursifs Ch. PAUL Algorithmique – Arbres binaires 9

PARCOURS IN-ORDRE void ParcoursIn(NOEUD *R) { if (R != NULL) ParcoursIn(R->gauche); printf("\n%s", R->info); ParcoursIn(R->droit); } } /* fin ParcoursIn */ ? Ch. PAUL Algorithmique – Arbres binaires 10

PARCOURS IN-ORDRE : AFFICHAGE 4 2 5 1 3 6 Parcours en in-ordre : le traitement (printf) se fait entre l'appel récursif à la branche gauche et l'appel récursif à la branche droite l'affichage se fait dans le bon ordre Ch. PAUL Algorithmique – Arbres binaires 11

PARCOURS POST-ORDRE void ParcoursPost(NOEUD *R) { if (R != NULL) ? ParcoursPost(R->gauche); ParcoursPost(R->droit); printf("\n%s", R->info); } } /* fin ParcoursPost */ ? Ch. PAUL Algorithmique – Arbres binaires 12

PARCOURS POST-ORDRE : AFFICHAGE 6 3 5 1 2 4 Parcours en post-ordre : le traitement (printf) se fait après les traitements de la branche gauche et de la branche droite Ch. PAUL Algorithmique – Arbres binaires 13

RECHERCHE – PRINCIPE La recherche d’une information se fait en log2(n) opérations (au lieu de n opérations au pire). Ainsi pour 1024 valeurs la recherche pour se faire en 10 opérations. Attention cela suppose que l’arbre binaire soit équilibré. Méthode de parcours utilisée : A chaque nœud : comparer la valeur recherchée avec la valeur du nœud. Si c’est la même arrêter, Si elle est plus petite, relancer récursivement la recherche sur la branche gauche, Si elle est plus grande, relancer récursivement la recherche sur la branche droite, Ch. PAUL Algorithmique – Arbres binaires 14

DESALOCATION DES NOEUDS D'UN ARBRE void DesalouerArbre(NOEUD *R) { if (R != NULL) DesalouerArbre(R->gauche); DesalouerArbre(R->droit); free(R); } Remarque : la désalocation est un traitement de type post-ordre Ch. PAUL Algorithmique – Arbres binaires 15

RECHERCHER UNE INFORMATION int fRechercherMot(NOEUD *A, char motRech[]) {int icmp=0; if (A==NULL) { printf("\nMot non trouvé"); return -1; } icmp= strcmp(motRech,A->info); printf("\nvaleur courante : %s ",A->info); if (icmp==0) { printf("\nMot trouvé"); return 0; } . . . Ch. PAUL Algorithmique – Arbres binaires 16

RECHERCHER UNE INFORMATION int fRechercherMot(NOEUD *A, char motRech[]) {int icmp=0; if (A==NULL) { printf("\nMot non trouvé"); return -1; } icmp= strcmp(motRech,A->info); printf("\nvaleur courante : %s ",A->info); if (icmp==0) { printf("\nMot trouvé"); return 0; } if (icmp<0) return fRechercherMot(A->gauche,motRech); if (icmp>0) return fRechercherMot(A->droit,motRech); } /* fin fRechercherMot */ Ch. PAUL Algorithmique – Arbres binaires 17

SUPPRESSION D'UN NOEUD : PRINCIPE La suppression d’une information est en général suivie d’un ré-équilibrage de l’arbre. Le cas traité ici ne se préocupe pas de rééquilibrage. Le principe de la suppression est le suivant : Si le nœud est trouvé (voir la recherche) Le remplacer par son fils droit, Insérer complètement à gauche du fils droit l’ancien fils gauche 5 3 8 1 4 9 Ch. PAUL Algorithmique – Arbres binaires 18

SUPPRESSION D'UN NOEUD : INSERTION A L'EXTREME GAUCHE NOEUD *fInsererGauche(NOEUD *A, NOEUD *Ins) { if(A== NULL) return Ins; A->gauche=fInsererGauche(A->gauche,Ins); return A; } /* fin fInsererGauche */ Ch. PAUL Algorithmique – Arbres binaires 19

SUPPRESSION D'UN NOEUD : FONCTION NOEUD *fSuppMot(NOEUD *A, char motS[]) { int icmp=0; NOEUD *S=NULL; if(A==NULL) { printf("\nMot non trouvé!"); return NULL;} icmp= strcmp(motS,A->info); if (icmp==0) { printf("\nMot trouvé!"); S=A; A=fInsererGauche(A->droit,A->gauche); free(S); return A; } . . . Ch. PAUL Algorithmique – Arbres binaires 20

SUPPRESSION D'UN NOEUD : FONCTION NOEUD *fSuppMot(NOEUD *A, char motS[]) { int icmp=0; NOEUD *S=NULL; if(A==NULL) { printf("\nMot non trouvé!"); return NULL;} icmp= strcmp(motS,A->info); if (icmp==0) { printf("\nMot trouvé!"); S=A; A=fInsererGauche(A->droit,A->gauche); free(S); return A; } if (icmp<0) { A->gauche=fSuppMot(A->gauche,motS); return A; } if (icmp>0) { A->droit=fSuppMot(A->droit,motS); } /* fin fSupprimerMot */ Ch. PAUL Algorithmique – Arbres binaires 21