IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Algorithme de suppression d'un élément dans un arbre binaire de recherche


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut Algorithme de suppression d'un élément dans un arbre binaire de recherche
    salut a tous !
    S.V.P, Je cherche l'algorithme de suppression d'un élément dans un arbre binaire de recherche !
    voila mes essais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    type abr=^elt;
    elt=enregistrement
    val:entier;
    g,d:abr;
    fin;
    ......
    ......
    ......
    fonction recherche(a:abr;v:entier):abr
    debut
    si (a=null)alors recherche<==null
    sinon si (a^.val=v)alors recherche<==a
    sinon si (a^.val>v) alors recherche <==recherche(a^.g,v)
    sinon recherche <==recherche (a^.d,v);
    fin;
    ......
    ......
    ......
    fonction succ(var a:abr):abr
    var p:abr;
    debut
    si (a<>null)alors
    debut
    si (a^.d<>null) alors
    debut
    p<==a^.d;
    tantque(p^.g^.g<>null)alors p<==p^.g;
    fin;
    succ<==p;
    fin;
    fin;
    ......
    ......
    ......
    procedure supp(a:abr;v)
    var x:abr; 
    debut
    x<==recherche(a,v);
    si (x=null)alors ecrire"la valeur que vous voulez supprimé nexiste pas dans cet arbe"
    sinon
    debut
    si((x^.g=null)et(x^.d=null)) alors dispose(x)
    sinon si ((x^.d<>null)et(x^.g=null))alors
    debut
    s<==succ(x);
    x^.val<==s^.val;
    dispose(s);
    fin
    sinon si((x^.d<>null)et(x^.g<>null))alors
    debut
    s<==succ(x);
    x^.val<==s^.val;
    dispose(s);
    fin
    sinon
    debut
    x^.val<==x^.g^.val;
    dispose(x^.g);
    fin;
    fin;
    j'ai trouvé l'idée sur wiki (mais honnêtement j'ai pas pu le faire):
    plusieurs cas sont à considérer, une fois que le nœud à supprimer a été trouvé à partir de sa clé :

    * Suppression d'une feuille : Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.
    * Suppression d'un nœud avec un enfant : Il faut l'enlever de l'arbre en le remplaçant par son fils.
    * Suppression d'un nœud avec deux enfants : Supposons que le nœud à supprimer soit appelé N (le nœud de valeur 7 dans le graphique ci-dessous). On le remplace alors par son successeur le plus proche (le nœud le plus à gauche du sous-arbre droit - ci-dessous, le nœud de valeur 9) ou son plus proche prédécesseur (le nœud le plus à droite du sous-arbre gauche - ci-dessous, le nœud de valeur 6). Cela permet de garder une structure d'arbre binaire de recherche. Puis on applique à nouveau la procédure de suppression à N, qui est maintenant une feuille ou un nœud avec un seul fils.

    Pour une implémentation efficace, il est déconseillé d'utiliser uniquement le successeur ou le prédécesseur car cela contribue à déséquilibrer l'arbre.

    Dans tous les cas cette opération requiert de parcourir l'arbre de la racine jusqu'à une feuille : le temps d'exécution est donc proportionnel à la profondeur de l'arbre qui vaut n dans le pire des cas, d'où une complexité maximale en O(n).

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    n'hésitez pas a me critiqué,guidé ou corrigé s'il y a des fautes svp

  3. #3
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Exemple de code en Python et C++ : http://en.wikipedia.org/wiki/Binary_..._tree#Deletion

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    j'ai aucune idée sur le langage python ! es que c'est possible de l'aidé avec des pseudo code ?

  5. #5
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894

  6. #6
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    non plus , je suis amateur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression dans un arbre binaire de recherche
    Par allomona dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 06/12/2014, 08h51
  2. modifier une valeur dans un arbre binaire de recherche?
    Par paco_the_king dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2012, 20h26
  3. Réponses: 2
    Dernier message: 07/12/2009, 11h43
  4. Ajout dans les arbres binaires de recherche
    Par chouki dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/12/2008, 15h32
  5. Suppression dans un arbre binaire de recherche
    Par zeine77 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo