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 :

Fonctions d'un arbre binaire ABOH


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Points : 23
    Points
    23
    Par défaut Fonctions d'un arbre binaire ABOH
    Bonjour, je suis a la recherche d'une fonction permettant de calculer la hauteur d'un arbre, j'ai codé ceci mais ça ne semble pas fonctionné :

    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
    int hauteur(ptr_arbre a)
    {
       int h;
       h = 0;
     
       if(a == NULL)
       {
           return ;
       }
       else
       {
           h = 1 + hauteur(a->sag) + hauteur(a->sad);
       }
       return h;
    }

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par GouKen Voir le message
    Bonjour, je suis a la recherche d'une fonction permettant de calculer la hauteur d'un arbre, j'ai codé ceci mais ça ne semble pas fonctionné :

    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
    int hauteur(ptr_arbre a)
    {
       int h;
       h = 0;
     
       if(a == NULL)
       {
           return ;
       }
       else
       {
           h = 1 + hauteur(a->sag) + hauteur(a->sad);
       }
       return h;
    }
    Ton code n'est pas correct.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int hauteur(ptr_arbre a)  {
       int h;
     
       h = 0;   
       if (a != NULL) {
           h = 1 + hauteur(a->sag) + hauteur(a->sad);
       }
       return h;
    }
    Mais je ne suis pas sûr que ce soit le bon algo pour calculer l'hauteur d'un arbre. Il te retourne, à mon avis et en première lecture, le nombre d'éléments de ton arbre.
    Bien le bonjour chez vous
    Jowo

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    en effet il retourne le nb d'éléments de l'arbre...
    quelqu'un aurait une idée pour calculer la hauteur d'un arbre ?!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    personne ne sait m'aider?!

  5. #5
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    Salut
    A vrai dire je ne sais pas ce que tu désignes par la hauteur de l’arbre, est ce la plus longue branche de cet arbre ou est ce le nombre de branche ?
    rien pour l'instant

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 58
    Points : 23
    Points
    23
    Par défaut
    la hauteur correspond finalement au nombre d'étage de l'arbre..le soucis est de ne pas compter 2x un élément sur le même étage..

  7. #7
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour,

    La hauteur d'un arbre binaire est la longueur du plus grand chemin de la racine aux feuilles.

    Donc il suffit de conserver la valeur maximale retournée par la visite des sous-arbres et de la retourner en l'incrémentant de 1.

    A toi de trouver le code. Il suffit de peu de changement pour que ton code fonctionne.
    Bien le bonjour chez vous
    Jowo

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    j'ai fait un devoir dessus, testé et vérifié, la fonction hauteur ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int hauteur(ptr_ArbreBinaire a)
    {
        if(estVide(a))         
            return ERREUR;
     
     
        if(est1feuille(a))
            return 0;
        else
            return 1+max(hauteur(filsgauche(a)), hauteur(filsdroit(a)));
     
    }
    La fonction max renvoyant simplement le plus grand de 2 entiers passés en paramètres. (Pour les arbres déséquilibrés)

  9. #9
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    Salut
    tout d'abord je m’excuse pour le retard. Je vous propose de déclarer une variable globale de type entier pour y mettre la hauteur par exemple b, puis essayez le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void hauteur( ptr_arbre a,int n)
    {
    	if(a !=NULL)
            {
    	        hauteur(a->sag,n+1) ;
                    if(n>b)  b=n;
    	        hauteur(a->sad,n+1) ;
            }
    }
    Puis dans le main() apellez le fonction en mettant 1 comme deuxième argument.
    J’espère que ça va marcher
    rien pour l'instant

  10. #10
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par archer Voir le message
    Salut
    tout d'abord je m’excuse pour le retard. Je vous propose de déclarer une variable globale de type entier pour y mettre la hauteur par exemple b, puis essayez le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void hauteur( ptr_arbre a,int n)
    {
    	if(a !=NULL)
            {
    	        hauteur(a->sag,n+1) ;
                    b=max(n,b) ;
    	        hauteur(a->sad,n+1) ;
            }
    }
    Puis dans le main() apellez le fonction en mettant 1 comme deuxième argument.
    J’espère que ça va marcher
    Monsieur Archer,

    Il faut immédiatement arrêter de fumer la moquette. Les acariens grillés, ce n'est pas bons pour les petites cellules grises.

    Soyons sérieux, déclarer un variable globale pour sauvegarder la valeur retournée par une fonction!!
    Voyons même en Basic ou en assembleur, on n'utilise pas de telles horreurs...
    Bien le bonjour chez vous
    Jowo

  11. #11
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    Salut
    je me demande bien pourquoi tu es si agressif alors que mon but est d’aider. D’autant plus si tu as d’autres solutions allez vas s’y j’attends sinon essayes au moins de l’améliorer.
    rien pour l'instant

  12. #12
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Salut

    Je ne suis pas agressif... . Je suis mordant.

    La solution, je la connais déjà et en plus jmi23 l'a déjà donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int hauteurArbre(Noeud n)
    {
       int h = 0;
     
       if (n != NULL) {
           h = 1 + max(hauteurArbre(n->sag) + hauteurArbre(a->sad));
       }
       return h;
    }
    Je te prie de bien vouloir m'excuser si tu t'es senti agressé.
    Bien le bonjour chez vous
    Jowo

  13. #13
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    Salut
    Ce n’est rien
    Essayes ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void hauteur( ptr_arbre a,int n,int *b)
    {
    	if(a !=NULL)
    {
    	hauteur(a->sag,n+1,b) ;
            if(n>*b) *b=n ;
    	hauteur(a->sad,n+1,b) ;
    }
    }
    Puis dans le main() déclarez une variable qui contiendra la hauteur de l’arbre puis faîtes appelle à la fonction en mettant 1 comme deuxième argument et cette variable comme dernier.
    Je ne crois pas que là aussi je fume le ‘tapis’.
    rien pour l'instant

Discussions similaires

  1. Fonctions de base sur un arbre binaire
    Par Caidriq dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 23/06/2015, 21h37
  2. Générateur d'arbre binaire logique basé sur la fonction XNOR
    Par Invité dans le forum Mon programme
    Réponses: 2
    Dernier message: 14/06/2011, 19h04
  3. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  4. fonction de base d'un arbre binaire
    Par abdelkaderg54 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/04/2007, 17h52
  5. Fonction taille et hauteur arbre binaire de façon itérative
    Par kalthoum dans le forum Autres langages
    Réponses: 1
    Dernier message: 04/12/2006, 19h55

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