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

C Discussion :

Arbre Binaire de Recherche


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Arbre Binaire de Recherche
    Bonjour
    je veux ecrire en c une fonction permettant de verifier si un arbre binaire est un arbre binaire de recherche (c-a-d chaque sous arbre gauche est inferieur ou egal a la racine et chaque sous arbre droite lui est superieur)
    Merci de m'aider

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    si on part de la définition d'un abr :

    • un arbre vide est un abr
    • chaque noeud vérifie :
      • le fils gauche est un abr, la clé du fils gauche (s'il existe) doit être inférieure à la clé du noeud
      • le fils droit est un abr, la clé du fils droit (s'il existe) doit être supérieure à la clé du noeud


    Donc l'algorithme consiste à simplement vérifier les propriétés qu'on attend d'un abr. L'implémentation dépend de ta sdd mais est simple à mettre en oeuvre. Il te faut une fonction qui checke les propriétés récursivement à partir d'un noeud :
    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
    bool isBST(node n)
    {
      // Si le noeud est vide c'est bon c'est la première propriété
      if (isEmpty(n))
        return true
      else {
        // Sinon on vérifie les autres propriétés
     
        // Si une des propriétés est violées par le fils gauche on renvoie faux
        if (!isEmpty(getLeftChild(n))) {
          if (getKey(getLeftChild(n))>getKey(n))
            return false
          if (!isBST(getLeftChild(n)))
            return false
        }
     
        // Idem pour le fils droit
        if (!isEmpty(getRightChild(n))) {
          if (getKey(getRightChild(n))<=getKey(n))
            return false
          if (!isBST(getRightChild(n)))
            return false
        }
     
        // Si on arrive ici c'est que toutes les propriétés sont vérifiées
        return true;
      }
    }
    et une fonction pour ta structure arbre qui ne fait qu'appeller la vérification pour un noeud sur la racine.
    Suivant ton style de codage, la sdd utilisée, l'unicité des clés, ..., l'implémentation peut être plus ou moins compacte.

Discussions similaires

  1. Arbre Binaire De Recherche
    Par dream_lover dans le forum C
    Réponses: 4
    Dernier message: 19/05/2007, 23h45
  2. Suppression dans un arbre binaire de recherche
    Par zeine77 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 20h40
  3. Réponses: 3
    Dernier message: 31/12/2005, 12h30
  4. Réponses: 11
    Dernier message: 07/04/2004, 13h06
  5. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45

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