CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Arbre de recherche binaire

dzkille
dzkille
Niveau 10
09 décembre 2016 à 17:04:24

Bonsoir à tous, je suis actuellement entrain de voir le concept de liste chaînée et doublement chaînée en programmation java et notre professeur nous a demander de réaliser un ABR(Arbre de recherche binaire). Fonctionnant comme ceci : Chaque "élément" de l'arbre possède une valeur(dans notre cas en int) et possède un "fils" gauche et un fils "droit".

Le programme (tournant sur blueJ) fonctionnerait donc comme ceci : Lors de l’exécution, on demande à l'utilisateur d'entrer la première valeur (par exemple 5). On va donc créer un premier arbre possèdant une valeur int qui vaut 5, mais également caractérisé un fils gauche vide (null) et un fils droit vide (null).
Pour cette étape j'ai compris ce qu'il fallait faire, rien de bien compliqué en soit.

Cependant, on doit aussi créer une méthode poiur ajouter des éléments(qui seront également des arbres !) en fonction des conditions suivantes : si la valeur entrée est plus petite(par exemple 3) que la valeur de départ(imaginons v comme variable) alors on remplace le fils gauche vide(null) par le nouvel arbre de valeur qui faudra 3 et qui possèdera lui aussi un fils gauche et droit tout les deux null.
Si la valeur entrée est plus grande que v, alors on la met au fils droit.

C'est la que cela commence à devenir difficile.
Imaginons que l'on ré encode une valeur en plus, alors il faut vérifier si elle est plus grande que v, si oui alors c'est assez simple, la valeur v de départ la prends comme arbre à la place de null.
Hors s'il on rentre de nouveau une valeur, par exemple 4, il faut vérifier si 4 est plus petit que5, oui et ensuite il faut la comparé à 3 et voir s'il elle est plus grande, ici oui donc on la met à la place du fils droit

Alors on pourrait pensée qu'il suffirait de faire un double if, hors notre professeurs veut que nous puissions en entrer une infinité, d'où ici l'intérêt de méthode récursive que je ne comprends pas très bien(j'ai compris la façon dont cela marchait, mais je ne comprends pas comment l'utilisait dans ce cas ci avec une valeur( v ) passait en parametre de la méthode).

Je m'en tourne donc vers vous pour essayer de m'expliquer comment cela marche avec si possible un exemple ( attention je ne demande pas que vous fassiez le travail, je demande juste à comprendre).

Merci d'avance et bonne fin de soirée.

tharsisco
tharsisco
Niveau 10
09 décembre 2016 à 18:48:16

En fait chaque noeud est un arbre qui possède deux noeuds également, qui possèdent eux-mêmes deux noeuds etc.
Quand un noeud n'a pas de fils (qu'ils valent null) on parle de feuille.

Ta fonction récursive s'appliquera à un arbre/noeud. Cet arbre sera d'abord la racine (5 dans ton cas), mais si les deux fils sont déjà définis, alors tu appelleras la fonction récursive sur le fils qui convient, et lui fera la même chose (comparaison avec la valeur à insérer, insertion de la valeur sur le bon fils ou appel récursif sur le fils qui convient si les deux fils sont déjà pris)

dzkille
dzkille
Niveau 10
17 décembre 2016 à 20:01:51

D'accord, j'ai compris , merci ! :)

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment