Arbre binaire ( question debutant)

tataaoa -  
 tataaoa -
Bonjour,
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:

3 réponses

fjbvqlkjhv Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   27
 
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/
1
tataaoa
 
c'est du sql! Ce n'est pas le meme langage de programmation, mon probleme reside justmenent dans la comprehension de la syntaxe java!
0
fjbvqlkjhv Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   27
 
C'est pas du SQL c'est un concept...celui de représenter un arbre avec des bornes pour chaque éléments de celui ci.

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
0
tataaoa
 
Merci beaucoup!
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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 :

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
0
tataaoa
 
Dans la suite de mon exercice il y a deux fonction ,
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?
0
fjbvqlkjhv Messages postés 315 Date d'inscription   Statut Membre Dernière intervention   27
 
List, c'est la liste des éléments qui composent un élément spécifique de l'arbre, Root c'est un élément "père" de l'arbre.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 !
0
tataaoa
 
Ok ok tres bien, merci a vous deux! Tout est plus clair!
0