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

Java Discussion :

Ex. Arbre Binaire


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut Ex. Arbre Binaire
    Voilà je suis tjrs. en train de faire quelques exemples pour préparer mon examen et je voulais avoir votre avis sur mon code.

    Voilà les 3 questions que j'essaye de résoudre j'ai du mal à comprendre la question b si qn. a une de ce qu'il faut faire ce serait sympa de me l'expliquer.
    J'ai l'impression que je me complique la vie avec la question b.

    Sinon j'ai écrit un code pour les questions a et c

    (a)Ecrire une fonction qui prend comme argument un arbre binaire dans lequel chaque noeud a une clé et détermine si l'arbre est un arbre binaire trié.

    (b)Ecrire une fonction qui calcue dans un arbre binaire trié pour un noeud donné x le successeur de x c'est-à-dire, le noeud avec la plus petite clé supérieur à la clé de x.

    (c)Pour un noeud donnée d'un arbe binaire définir de déséquilibre comme la différence des hauteurs des deux sous arbres en valeur absolue (on suppose que la hauteur d'un sous-arbre vide est -1). le déséquilibre d'un arbre est le maximum des déséquilibres des noeuds. Ecrire un fonction qui calcule le déséquilibre d'un arbre binaire donné en argument.

    Réponse A
    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
     
    static boolean isBST2(Arbre root) {
     return( isBST2(root, Integer.MIN_VALUE, Integer.MAX_VALUE) );
    }
     
    static boolean isBST2(Arbre node, int min, int max) {
      if (node==null) {
        return(true);
      }
     
       boolean leftOk = isBST2(node.filsG, min, node.contenu);
     
       // if the left is not ok, bail out
       if (!leftOk) return(false);
     
     
       // right should be in range node.data+1..max
       boolean rightOk = isBST2(node.filsD, node.contenu+1, max);
     
       if (!rightOk) return(false);
     
       if(node.contenu<=max && node.contenu>=min){
           return true;
       }else{
           return false;
       }
     
    }
    Réponse C

    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
     
     static int calculeDes(Arbre a)
      {
        int hautTD=0;
        int hautTG=0;
        if(a.filsD!=null){
            hautTD=calculeDes(a.filsD);
        }
        if(a.filsG!=null){
            hautTG=calculeDes(a.filsG);
        }
        int désT=Math.abs(Math.max(hautTD, hautTG));
        int hautG=hauteur(a.filsD);
        int hautD=hauteur(a.filsG);
        int dés=Math.abs(hautG-hautD);
        return Math.max(dés,désT);
      }
     
      static int hauteur(Arbre a){
          if(a==null){
            return -1;
          }else{
            int hautG=hauteur(a.filsG);
            int hautD=hauteur(a.filsD);
            return 1+Math.max(hautG, hautD);
          }
      }
    Merci

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    La question b n'est pas limpide. J'imagine que la fonction a en paramètre un arbre et une clé, et qu'il faut chercher récursivement la clé suivante dans l'ordre de tri de l'arbre ?
    Si c'est ça, alors il faut faire une simple recherche par une boucle while dans l'arbre pour trouver la clé (puisque l'arbre est trié), puis renvoyer le fils droit du noeud contenant la clé, ou null si pas de fils.

    Pour la réponse a, j'aurais fait plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    static boolean isBST2(Arbre root)
    {
      if( root == null )
      {
        return true;
      }
     
      return isBST2( root.filsG ) && isBST2( root.filsD )
        && ( root.filsG == null || root.contenu >= root.filsG.contenu )
        && ( root.filsD == null || root.contenu < root.filsD.contenu ) );
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    Pour la question b j'ai du mal à comprendre l'énoncé de la question, c'est ca mon problème.
    J'avais aussi penser a ce que tu propose, donc je pars sur ca et j'essais de faire l'exo.

    Merci pour la simplification de la réponse a

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    questions complémentaires (puisqu'on est dans le monde universitaire ): est-ce qu'on vous fait calculer la complexité d'un tel algorithme? Est ce qu'on en fait tirer des conclusions sur la conception de tels arbres?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 6
    Par défaut
    je ne suis pas dans une université mais je prépare seulement un examen, je n'ais plus trop l'habitude de programmer donc pas évident .
    Mais si je me rapelle bien dans mon école sup. on calculé la complexité de tel arbres, mais bon cela remonte à tellement loin.
    Il y a-t-il une raison a ta question?

    Une petite question lecode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    return isBST2( root.filsG ) && isBST2( root.filsD )
        && ( root.filsG == null || root.contenu >= root.filsG.contenu )
        && ( root.filsD == null || root.contenu < root.filsD.contenu ) );
    on pourrait le simplifier en supprimant le root.filsG == null et root.filsD == null?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    return isBST2( root.filsG ) && isBST2( root.filsD )
        && (root.contenu >= root.filsG.contenu )
        && ( root.contenu < root.filsD.contenu ) );
    Ou est-ce-que j'ai rater un truc.

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    non, ce n'est pas simplifiable, car tu tentes d'accéder à un attribut du fils. Si le fils est null, il va y avoir un NullPointerException.
    Il faut donc tester si l'objet existe avant de l'utiliser.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par lazydev Voir le message
    Il y a-t-il une raison a ta question?
    ben oui: l'algo reste purement un exercice vu que sa complexité est pas terrible. Le fait d'être "trié" devrait être une propriété sui generis de l'arbre et les opérations d'insertion doivent en tenir compte (arbres "balancés").

Discussions similaires

  1. Afficher un arbre binaire avec sa structure
    Par PhoneKilleR dans le forum C
    Réponses: 7
    Dernier message: 23/04/2008, 23h24
  2. suppression d'un arbre binaire
    Par NomUtilisateurDejaPris dans le forum C
    Réponses: 11
    Dernier message: 16/02/2004, 10h05
  3. [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
  4. Arbre binaire
    Par Heaven dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/02/2004, 19h01
  5. [LG]probleme de creation arbre binaire
    Par jsaviola dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2004, 20h57

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