Partage
  • Partager sur Facebook
  • Partager sur Twitter

Taille d'un arbre binaire

17 mai 2014 à 11:44:30

Bonjour, j'ai un soucis avec les arbres binaires : j'arrive pas à concevoir comment compter les nombre d'elements qui le composent: est-ce qu'il y a un moyen de faire ca sans revenir à la racine tout le temps ?

Pour le moment, j'ai rien trouvé qui puisse m'aider à comprendre, et copier betement un bout de code ca sert à rien. Est ce que vous pourriez me donner des liens qui expliquent ca ou me l'expliquer s'il vous plait ?

  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2014 à 11:50:21

Normalement tu n'a besoin de revenir que 1 fois a la racine, car la racine peut "créer" deux liens au maximum.

Il suffit de faire une recherche par noeud : d'abord tu part de la racine, tu prend la direction "0" (disons gauche), ensuite tu vas continuer a prendre a chaque noeud la direction de gauche, jusqu'a ce que celle ci s'epuise, ensuite tu retourne un noeud en arriere, prends la direction droite et ensuite a gauche a nouveau jusqu'a ce que ce noeud s'epuise, et tu continue. Apres un certain temps, tu aura completement epuisé la partie gauche de la racine, donc tu retourne sur la racine et fait refait la meme chose avec le coté droit. ;)

-
Edité par ghost-mystic 17 mai 2014 à 11:51:09

  • Partager sur Facebook
  • Partager sur Twitter
Né en Russie mais natif de Lyon !
17 mai 2014 à 13:12:17

haaa ! ok je vois le principe.

Par contre, comment je fais pour revenir en arriere autant de fois que je veux ? Parce que logiquement, quand je suis en bas de l'arbre, pour remonter je dois garder l'adresse en reserve, je peux pas compter et refaire la fonction sur mesure à chaque fois.

  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2014 à 13:31:12

Quand on travaille sur des arbres, on choisi généralement d'utiliser des fonctions récursives.

Quelle est la taille d'un noeud? C'est 1 + la taille de son sous-arbre droit + la taille de son sous-arbre gauche.

int tree_size(tree root){
    if (root == NULL)
        return 0;
    else
        return 1 + tree_size(root->left) + tree_size(root->right);
}



  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2014 à 14:35:47

ho je vois... rien à voir avec ce sur quoi je suis parti ,je vais quand même voir si je peux finir avec la méthode longue et chiante sur laquelle j'étais.

merci beaucoup :)

  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2014 à 21:08:55

Sinon, tu peux utiliser les mêmes méthodes que pour parcourir un graphe: aka une pile pour un DFS ou une file pour un BFS.
  • Partager sur Facebook
  • Partager sur Twitter
yjltg.
31 mars 2023 à 0:13:36 - Message modéré pour le motif suivant : Merci d’utiliser le bouton code pour inséré un code sur le forum


31 mars 2023 à 1:21:19

@AbdellatifTaye:
Bien que ton code soit correct, tu as tout de même déterré un sujet vieux de 2014.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

31 mars 2023 à 1:25:22

@AbdellatifTaye Bonsoir, merci de ne pas déterrer d'ancien sujet.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter