Arbre en largeur vers en profondeur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Arbre en largeur vers en profondeur

Re: Arbre en largeur vers en profondeur

par sirakawa » 12 oct. 2012, 21:34

je verrai plus la construction d'un arbre avec un objet ayant comme propriété valeur, père, fils1, et fils2

On pourrait avoir un une fonction qui affiche la valeur de l'élément puis passe la main aux éléments fils1 puis fils2 pour faire la même chose.
Oui, c'est évidemment la bonne solution; mais je voulais répondre strictement à la question posée.
Inutile d'ajouter une propriété frère_de, pour éviter de repasser par le père, puisque tous les frères sont au même niveau ?
Dès le moment qu'on prend la solution de mazarini, les algorithmes de création, de mise à jour et de parcours traînent dans tous les bouquins de structures de données, entre autres parce que c'est un mode de manipulation des données connu sous le nom d'arbre binaire (équilibré ou pas, suivant les choix et les besoins du programmeur). Moins connu maintenant, parce que les Bdd s'occupent de presque tout sans dire comment elles font.

Re: Arbre en largeur vers en profondeur

par Mazarini » 12 oct. 2012, 14:01

je verrai plus la construction d'un arbre avec un objet ayant comme propriété valeur, père, fils1, et fils2

On pourrait avoir un une fonction qui affiche la valeur de l'élément puis passe la main aux éléments fils1 puis fils2 pour faire la même chose.

Re: Arbre en largeur vers en profondeur

par moogli » 12 oct. 2012, 11:55

yop

c'est pas clair du tout ça.

un tableau, au départ, c'est une dimension, donc largeur ou profondeur ça ne veux rien dire.

Peux être qu'avec un exemple concret du tableau à traité se serait plus simple.

si l'affichage doit être la pyramide que tu indique tu peux voir du coté de array_slice en gérant offset et longueur.

l'offset se calcul en fonction du nombre d'itération et de la dernière longueur.
la longueur se calcule en multiple de deux comme l'indique sirakawa.

je ferais le traitement dans une boucle while avec en condition : future offset < au nombre d'élément du tableau

@+

Re: Arbre en largeur vers en profondeur

par sirakawa » 12 oct. 2012, 11:30

Déjà il faudrait partir d'un tableau possible et au contenu plus clair:
$t = array(
'racine 0',
'gauche 1' ,'droit 2',
'gauche 3 de gauche 1','droit 4 de gauche 1','gauche 5 de droit 2', 'droit 6 de droit 2',
'gauche 7 de gauche 3', 'droit 8 de gauche 3', 'gauche 9 de droit 4', 'droit 10 de droit 4',
'gauche 11 de gauche 5', 'droit 12 de gauche 5', 'gauche 13 de droit 6', 'droit 14 de droit 6'
);
puis analyser avant de programmer
les 1ers fils se trouvent : en 1, 3, 7, 11 ou, si on fait démarrer le tableau en 1 en 2, 4, 8, 16 : multiples de 2.

Arbre en largeur vers en profondeur

par alainsl » 12 oct. 2012, 09:56

Bonjour à tous,

Je cherche à faire un traitement un peu compliqué. J'ai un tableau contenant des données :

0 1 2 3 4 5 6 7 8 9 10 .... qui correspondent à une lecture d'un arbre en largeur :

0
1 2
3 4 5 6
....

où chaque noeud à toujours 2 fils.

Et je souhaite, dans un but d'affichage, lire ce tableau en profondeur :

0 1 3 7 8 4 9 10 2 5 ....

Et je ne trouve absolument pas comment gérer cet algo. Ca fait 2 jours que j'essaie plusieurs méthodes mais sans succès.
J'aurai bien essayé de faire un déclaration de structure arborescente mais d'uen fois sur l'autre, mon arbre n'aura pas la meme taille (dépend de la taille du fichier analysé).

D'avance merci à ceux qui pourraient me donner des idéees