Arbre binaire ( question debutant)
tataaoa
-
tataaoa -
tataaoa -
Bonjour,
Je me penche actuellement sur les arbre binaires, il y a quelques petites choses que je ne comprend pas,
Quel est l'interet de mettre this.valeur = val
this.left = left et this.right = right. A quoi cela renvoie t'il?
Quand nous faisons list.left, je me doute qu'on renvoie a la valeur en dessous a gauche mais pourquoi list.left?
Que fait la boucle for? Elle va affiché i fois "" quel est l'interet?
Merci beaucoup pour votre aide!
Je me penche actuellement sur les arbre binaires, il y a quelques petites choses que je ne comprend pas,
public static void main(String[] args) { IntBinaryTree bt1 = new IntBinaryTree(-2, null, null); IntBinaryTree bt2 = new IntBinaryTree(-55, null, bt1); IntBinaryTree bt3 = new IntBinaryTree(30, null, null); IntBinaryTree bt4 = new IntBinaryTree(31, bt3, null); IntBinaryTree bt5 = new IntBinaryTree(92, null, null); IntBinaryTree bt6 = new IntBinaryTree(77, null, bt5); IntBinaryTree bt7 = new IntBinaryTree(42, bt4, bt6); IntBinaryTree bt8 = new IntBinaryTree(7, bt2, bt7); IntBinaryTree.afficherIntBinaryTree(bt8, 0); IntBinaryTree.search(bt8, 0); } } class IntBinaryTree { int valeur; IntBinaryTree left; IntBinaryTree right; IntBinaryTree(int val, IntBinaryTree left, IntBinaryTree right) { this.valeur = val; this.left = left; this.right = right; } static void afficherIntBinaryTree(IntBinaryTree list, int nb) { if (list != null) { for (int i = 0; i < nb; i++) { System.out.print(" "); } System.out.println(list.valeur); afficherIntBinaryTree(list.left, nb + 1); afficherIntBinaryTree(list.right, nb + 1); } }
Quel est l'interet de mettre this.valeur = val
this.left = left et this.right = right. A quoi cela renvoie t'il?
Quand nous faisons list.left, je me doute qu'on renvoie a la valeur en dessous a gauche mais pourquoi list.left?
Que fait la boucle for? Elle va affiché i fois "" quel est l'interet?
Merci beaucoup pour votre aide!
A voir également:
- Arbre binaire ( question debutant)
- Binaire - Guide
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Editeur binaire - Télécharger - Édition & Programmation
3 réponses
Salut,
Tu as là un exemple de code pour une arborescence intervallaire.
Lis ca, ca va t'aider à comprendre https://sqlpro.developpez.com/cours/arborescence/
Tu as là un exemple de code pour une arborescence intervallaire.
Lis ca, ca va t'aider à comprendre https://sqlpro.developpez.com/cours/arborescence/
"Quel est l'interet de mettre this.valeur = val "
C'est pour initialiser ton objet, afin de donner des valeurs aux différents champs.
Par exemple quand tu fais IntBinaryTree bt7 = new IntBinaryTree(42, bt4, bt6); cela veut dire que dans le constructeur tu feras des affectations bt7.valeur=42, bt7.left=bt4, et bt7.right=bt6.
Que fait la boucle for? Elle va affiché i fois "" quel est l'interet?
Ce n'est que de l'affichage, ça permet de décaler les noeuds afin de visualiser l'arborescence. Ce qu'il faut voir c'est que nb change grâce à l'appel récursif nb+1, donc les noeuds ne seront pas tous décalés du même nombre d'espaces. Plus les noeuds seront loin dans l'arbre, plus les valeurs seront décalées.
Cependant un seul espace c'est assez peu, moi je ferais un \t ce serait plus lisible :
Remarque : ici tu fais un affichage préfixe, mais un affichage infixe serait encore mieux, car il permet de visualiser le branchage gauche/droit :
C'est pour initialiser ton objet, afin de donner des valeurs aux différents champs.
Par exemple quand tu fais IntBinaryTree bt7 = new IntBinaryTree(42, bt4, bt6); cela veut dire que dans le constructeur tu feras des affectations bt7.valeur=42, bt7.left=bt4, et bt7.right=bt6.
Que fait la boucle for? Elle va affiché i fois "" quel est l'interet?
Ce n'est que de l'affichage, ça permet de décaler les noeuds afin de visualiser l'arborescence. Ce qu'il faut voir c'est que nb change grâce à l'appel récursif nb+1, donc les noeuds ne seront pas tous décalés du même nombre d'espaces. Plus les noeuds seront loin dans l'arbre, plus les valeurs seront décalées.
Cependant un seul espace c'est assez peu, moi je ferais un \t ce serait plus lisible :
7 -55 -2 42 31 30 77 92
Remarque : ici tu fais un affichage préfixe, mais un affichage infixe serait encore mieux, car il permet de visualiser le branchage gauche/droit :
-55 -2 7 30 31 42 77 92
Dans la suite de mon exercice il y a deux fonction ,
list et root ont le meme role nom? Pourquoi choisir l'un plutot que l'autre?
static void afficherIntBinaryTree(IntBinaryTree list, int nb){} et static IntBinaryTree search(IntBinaryTree root, int val){}
list et root ont le meme role nom? Pourquoi choisir l'un plutot que l'autre?
A priori il n'y a aucune raison d'appeler un arbre "list", c'est un non-sens. Et "root" laisse à penser que seule la racine est autorisée, ce qui n'a pas vraiment de sens avec ta structure d'arbre, vu que tous tes noeuds sont racines d'un arbre (contrairement à une structure d'arbre dont on pourrais remonter à son père, et où la racine serait l'unique noeud sans père).
Pour moi les noms les plus appropriés pour ces deux paramètres ce serait "tree", mais les noms n'ont aucune importance, si tu veux appeler tes arbres "césar" et "cléopâtre", rien ni personne ne peux t'en empêcher !
Pour moi les noms les plus appropriés pour ces deux paramètres ce serait "tree", mais les noms n'ont aucune importance, si tu veux appeler tes arbres "césar" et "cléopâtre", rien ni personne ne peux t'en empêcher !
Tu maitrise ce concept ? Si oui, voici les explications pour ton code java :
this.valeur = val
Attribut à ton objet "IntBinaryTree " sa valeur...correspond au libelle sur l'exemple que je t'ai passé. (il faut bien que ton élément de ton arbre porte une valeur sinon il n'a aucun intérêt ^^)
this.left = left et this.right = right
Spécifie les valeurs des bornes droites et gauche de ton élément de ton arbre.
"Quand nous faisons list.left, je me doute qu'on renvoie a la valeur en dessous a gauche mais pourquoi list.left? " Je ne comprends pas ta question
Je regarde pour ta boucle for après ma pause