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 pour trouver le niveau de chaque noeud d'un arbre binaire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut Algorithme pour trouver le niveau de chaque noeud d'un arbre binaire
    Bonjour,
    J'arrive à parcourir un arbre Binaire (parcours en largeur et parcours en profondeur RGD, GRD, GDR) mais je n'arrive pas à faire en sorte de trouver le niveau de chaque noeud.

    Pourriez-vous m'aider?

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ce ne serait pas 1 + le niveau de son père, sachant que la racine a le niveau 0 ou 1 ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    Oui c'est bien cela, la racine a 0 et ensuite c'est le niveau du père +1.

    Mais je n'arrive pas à écrire un algorithme qui reçoit un arbre binaire d'entier et qui place comme valeur dans chaque noeud de l'arbre le niveau.

    Donc dans la valeur de racine je placerai 0, ensuite dans ses fils je place 1, etc.

    Merci d'avance.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 103
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    C'est possible d'étiqueter les sommets avec leur profondeur en modifiant un peu le parcours en largeur.
    Il faut faire une passe par niveau en dupliquant la file.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Points : 51
    Points
    51
    Par défaut
    C'est ce que je voulais faire mais je n'arrive pas à transformer mon parcours en largeur... Je n'arrive pas à me rendre compte du moment ou je passe au niveau suivant...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 103
    Points : 110
    Points
    110
    Par défaut
    Voici le pseudo-code de l'algo :

    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
    Bfs(T) : array
    r := racine(T)
    créer deux files F1 et F2 et ajouter r dans F1
    i:=0
    faire
    tant que (F1 n’est pas vide)
    x :=premier(F1); supprimer x de F1
    array[i] := x
    i++
    pour chaque fils y de x
    ajouter y dans F2
    fin pour
    fin tant que
    F1 := F2
    // fin d’une passe début de la nouvelle : la
    F2 devient vide // profondeur change
    tant que F1 n’est pas vide
    Désolé, la mise en forme s'est perdue en chemin

  7. #7
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    De manière générale, tu peux faire cette alog en te basant sur un parcours en profondeur ou en largeur, peux importe. Le principale, dans les deux algos, c'est qu'au moment où tu récupères les fils d'un noeuds, tu en profites pour marquer leur profondeur. En effet, à ce moment, tu as la profondeur du père et tu peux facilement affecter la profondeur aux fils (prof(fils) = prof(père) + 1)

Discussions similaires

  1. quel algorithme pour trouver le plus grand sous arbres commun à des arbres?
    Par iwky911 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 20/05/2009, 21h08
  2. Algorithme pour trouver efficacement le matching complet (appairement) optimal ?
    Par LordFarquaad dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 28/03/2007, 10h27
  3. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 16h36
  4. algorithme pour trouver la mediane ?
    Par Battosaiii dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 04/07/2006, 10h22
  5. Algorithme pour trouver i entier tel que n + i² est un carré
    Par duchere dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 22/04/2006, 08h24

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