La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Arbre binaire.

Présentations similaires


Présentation au sujet: "Arbre binaire."— Transcription de la présentation:

1 Arbre binaire

2 Sommaire Introduction Terminologie Arbre Binaire
 Arbre de recherche binaire Chapitre 8 Data Structures & Algorithm, 2nd Edition, Robert Lafore

3 Introduction Tableau ordonné : Liste chaînée :
 opération de recherche : O(logN) opération d'insertion - suppression : recherche position déplacement N/2 items en moyenne  Liste chaînée :  opération d'insertion : O(1)  opération de suppression : O(1)  opération de recherche : O(N) Deux types de structure de données avec :  insertion/suppression rapide comme dans le cas de la liste  recherche rapide comme dans le tableau  Arbre : possède ces caractéristiques  structure de données la plus intéressante  Structures linéaires (séquences) : les listes chaînées, les piles et les queues  Structures non linéaires : Arbres

4 Introduction Arbre : un arbre est une structure à deux dimensions comportant une collection d'éléments appelés nœuds (nodes) associés entre eux par des arcs (edges) selon un ordre hiérarchique strict Dans un arbre, chaque nœud peut avoir plusieurs nœuds descendants appelés enfants (fils) mais il ne peut avoir qu'un seul ascendant, le parent.

5 Introduction Les nœuds sont identifiés par les lettres A à K
 A est le père des nœuds B, C, D, E  B est le père des nœuds F et G  D est le père de H  E est le père des nœuds I, J, K

6 Introduction Les nœuds représentent des entités tels que : personne, les composants d'une voiture, une entité du monde réel, etc.  Les arcs : représentés par des références dans un programme Java (pointeurs en C++) Différents types d'arbres :  arbre avec plusieurs enfants par nœud  arbre avec un maximum de deux enfants par nœud : arbre binaire

7 Terminologie

8 Terminologie Chemin (path) : le chemin d'un nœud est la suite de nœuds par lesquels il faut relier la racine à celui-ci  Racine : La racine d'un arbre est le seul nœud n'ayant pas de parent – il y a une seule racine dans un arbre  Parent : un nœud quelconque (excepté la racine) ne peut avoir qu'un seul nœud ascendant – le parent  Enfant : Chaque nœud peut avoir plusieurs nœuds descendants appelés enfants  Feuille : une feuille est un nœud n'ayant aucun enfant  Sous arbre : un sous arbre est un sous ensemble de nœud d'un arbre ayant une structure d'arbre  Visiter un nœud : un nœud est visité lorsque le contrôle de programme arrive à ce nœud, généralement, pour effectuer une certaine opération au niveau du nœud  Traverser : traverser un arbre signifie visiter tous les nœuds d'un arbre dans un ordre spécifié  Niveau : le niveau d'un nœud correspond au nombre de nœud de son chemin  Exemple : racine de niveau 0 enfants de la racine de niveau 1  Clé : la clé d'un item est représentée dans un cercle

9 Arbre binaire Un arbre binaire est un arbre dont les nœuds peuvent avoir au maximum deux enfants Dans un arbre binaire les enfants d'un nœud sont respectivement appelés enfant de gauche et enfant de droite Un nœud dans un arbre binaire peut avoir :  un enfant de gauche et un enfant de droite un enfant de gauche seulement  un enfant de droite seulement  aucun enfant – feuille  Intérêt des arbres binaires :  simplicité utilisation répandue examen de tous les algorithmes de base  cas particulier : arbre de recherche binaire 

10 Arbre de recherche binaire (introduction)
Un arbre de recherche est un arbre binaire satisfaisant aux propriétés suivantes : L'étiquette de chaque nœud contient une valeur particulière d'un type ordonné – cette valeur est appelée clé  Pour tous sous arbre, la clé de la racine est supérieure à toutes les clés du sous arbre gauche et inférieure à celles du sous arbre droit

11 Arbre de recherche binaire (représentation d’un arbre)
Différentes approches peuvent implémenter un arbre :  tableau stocker les nœuds dans des espaces non contigus et les connecter par des références Exemples de représentation class Node { int iData; // donnée clé double fData; // autre donnée Node leftChild; // enfant de gauche Node rightChild // enfant de droite public void displayNode() {… }

12 Arbre de recherche binaire (représentation d’un arbre)
Exemples de représentation class Node { Person p; // donnée clé Node leftChild; // enfant de gauche Node rightChild // enfant de droite …. public void displayNode() {… } class Person int iData;

13 Arbre de recherche binaire (représentation d’un arbre)
Définition de la classe arbre (Tree) class Tree { private Node root; // un seul champ public void find(int key) { … }

14 Arbre de recherche binaire (Opérations)
Rechercher un nœud dans un arbre  Insérer un nœud dans un arbre  Supprimer un nœud dans arbre  Parcourir un arbre  Afficher un arbre

15 Arbre de recherche binaire (Opérations)
Rechercher un nœud dans un arbre Un nœud dans un arbre de recherche : objet contenant l'information  Exemple :  Personne numero-Employe (clé) nom prenom Composant-Voiture num-Composant quantité prix Processus de recherche Clé recherchée : 57

16 Arbre de recherche binaire (Opérations)
Processus de recherche Clé recherchée : 57

17 Arbre de recherche binaire (Opérations)
Algorithme (programme) de recherche dans un arbre Node find (int key) { Node current =root; while (current.iData != key) if (key < current.iData) current = current.leftChild; else current = current.rightChild; if (current == null) return null; } return current;

18 Arbre de recherche binaire (Opérations)
Algorithme (programme) de recherche dans un arbre Efficacité:  Recherche : à quel niveau se situe le nœud ?  Arbre 5 niveaux => 5 comparaisons au maximum  Recherche: O(log2N)

19 Arbre de recherche binaire (Opérations)
Insertion : recherche du parent du nœud à insérer Exemple: Insérer 45

20 Arbre de recherche binaire (Opérations)
Insertion : Algorithme (programme) void insert (int id, double dd){ Node newNode = new Node(); newNode.iData = id; newNode.fData = dd; if (root == null) root = newNode; else { Node current = root; Node parent; While (true) { parent = current; if( id< current.iData) { current = current.leftChild; if (current == null) { parent.leftChild = newNode; return;} } else { current = current.rightChild; if (current == null) { parent.rightChild = newNode;

21 Arbre de recherche binaire (Opérations)
Parcours d’un arbre: visiter chaque nœud de l'arbre selon un ordre spécifié  Trois parcours utilisés : préordre, symétrique (inorder) et postordre  Parcours symétrique : parcours le plus utilisé pour parcourir un arbre de recherche binaire  Parcours symétrique: le parcours symétrique d'un arbre permet d'obtenir les éléments triés en ordre croissant  Traverser les nœuds du sous arbre gauche avant la racine  Visiter la racine  Traverser les nœuds du sous arbre droit

22 Arbre de recherche binaire (Opérations)
 Parcours symétrique Void inorder (Node localRoot) { if ( localRoot ! = null) { inorder (localRoot.leftChild); system.out.println(localRoot.iData " "); inorder (localRoot.rightChild); }

23 Arbre de recherche binaire (Opérations)
  Parcours en préordre visiter la racine traverser les nœuds du sous arbre gauche traverser les nœuds du sous arbre droit Parcours en postordre

24 Arbre de recherche binaire (Opérations)
 Recherche du minimum ou du maximum Recherche du minimum : enfant de gauche

25 Arbre de recherche binaire (Opérations)
 Recherche du minimum ou du maximum Recherche du minimum Node minimum() { Node current, last; Current = root; While (current != null) last = current; current = current.leftChild(); } return last;

26 Arbre de recherche binaire (Opérations)
 Suppression d’un nœud Suppression d'un nœud : recherche du nœud Pour la suppression d'un nœud trois cas à considérer : le nœud à supprimer est une feuille le nœud à supprimer à un enfant le nœud à supprimer à deux enfants  cas 1 : Nœud à supprimer est une feuille Supprimer un nœud feuille : mettre à null le champ du parent pointant vers le nœud à supprimer

27 Arbre de recherche binaire (Opérations: Suppression d’un noeud)
Node current = Node parent = root ; Boolean isleftChild = true; while (current.iData != key){ parent = current; if(key < current.iData){ isleftChild =true; current = current.leftChild; } else{ isleftChild =false; current = current.rightChild; if (current == null) return false; if (current.leftChild ==null && current.rightChild == null){ if (current == root) root = null else if (isleftChild) parent.leftChild = null else parent rightChild = null

28 Arbre de recherche binaire (Opérations: Suppression d’un noeud)
Cas 2 : Suppression d’un noeud ayant un enfant Le nœud à supprimer possède deux connections : vers le parent et vers l’enfant  Connecter l’enfant du nœud à supprimer avec le parent du nœud à supprimer  Cas possibles : enfant du nœud à supprimer : enfant de gauche ou enfant de droite  nœud à supprimer par rapport au parent : enfant de gauche ou enfant de droite  nœud à supprimer : racine

29 Arbre de recherche binaire (Opérations:Suppression d’un noeud)
Cas 2 : Suppression d’un noeud ayant un enfant // si pas d’enfant de droite remplacer par le sous arbre de gauche else if (current.rightChild == null) if (current == root) root = current.leftChild; else if (isleftChild) // si le noeud à supprimer est un enfant de gauche parent.leftChild = current.leftChild; else // le noeud à supprimer est un enfant de droite parent.rightChild = current.leftChild;

30 Arbre de recherche binaire (Opérations:Suppression d’un noeud)
Cas 2 : Suppression d’un noeud ayant un enfant // si pas d’enfants à gauche, remplacer avec le sous arbre de droit else if(current.leftChild==null) if(current == root) root = current.rightChild; else if(isLeftChild) // left child of parent parent.leftChild = current.rightChild; else // right child of parent parent.rightChild = current.rightChild; // ...  

31 Arbre de recherche binaire (Opérations:Suppression d’un noeud)
Cas 3 : suppression d’un nœud ayant deux enfants  Arbre binaire de recherche : nœud – ordre ascendant de clés Pour chaque nœud : le nœud avec la valeur élevée est appelé successeur (inorder successor)  Supprimer un nœud ayant deux enfants consiste à le remplacer par son successeur

32 Arbre de recherche binaire (Opérations: Suppression d’un noeud)
Cas 3 : suppression d’un nœud ayant deux enfants  Node getSuccessor(Node delNode)  { Node successorParent = delNode Node successor = delNode Node current = delNode.rightChild; while( current != null) { successorParent =successeur; successor = current; current = current.leftChild } if (successor != delNode.rightChild) successorParent.leftChild = successor.rightChild; successor. rightChild = delNode.rightChild; return successor;

33 Arbre de recherche binaire (Efficacité des opérations)
Nombre de noeuds Nombre de niveaux  Si le nombre de nœuds est : N Nombre de niveaux : L N = 2L – L = N + 1 L = log2 (N + 1) Opérations courante : O(log2N)  L’arbre : opérations communes plus efficaces que dans le cas des autres structures Traversée : moins rapide


Télécharger ppt "Arbre binaire."

Présentations similaires


Annonces Google