Libro de Visitas Gratis
Inicio | Directorio de Páginas | Diseño Gráfico | Gadgets | Posicionamiento | Webmasters| Buscador de Artículos | Glosarios

Algoritmo recursivo para un arbol

Añade Tu Web Al Directorio de NocionDigital.com
Este código nos permitirá  comprender la elaboración de diagramas de arbol, esta técnica  es utilizada por ejemplo en la elaboración de los esquemas de respuestas  en los foros de discusion.                                                              

Tenemos una tabla de dos dimensiones con los elementos a ordenar. Cada elemento tiene su propio índice, el índice de su elemento padre (si es 0 el es un elemento padre) y un texto.

El algoritmo lo ordena de forma que quede un arbol ordenado con todos los elementos hijos debajo de us elementos padre. El resultado de este ejemplo seria algo así:


BOISSONS
    Alcool
        biere
        porto
    Sans alcool
        eau
ALIMENTS
    Legumes
        salades
            batavia
            laitue
        carottes
        tomates
    viandes
        Jambon
        steack haché
DIVERS
    Dentifrice
    sacs poubelles
    lessive


El código del programa es el siguiente:



<?php

// ------------------------------------------------------------------------- //
// Autor:  Christophe GORGERY                                                //
// Email:  webmaster@desperaweb.com                                          //
// Web:    http://desperaweb.com/                                            //
// ------------------------------------------------------------------------- //

function espace($rang) {
  $ch="";
  for ($x=0;$x<$rang;$x++) {
      $ch=$ch."&nbsp;&nbsp;&nbsp;&nbsp;";
  }
return $ch;
}

/*fonction récursive d´affichage de l´arbre
    $tab  :tableau des éléments
    $pere :index de l´élément courrant
    $rang :décallage de l´élément
*/
function recur($tab,$pere,$rang) {

  //ballayage du tableau
  for ($x=0;$x<count($tab);$x++) {

    //si un élément a pour père : $pere
    if ($tab[$x][1]==$pere) {

       //on l´affiche avec le décallage courrant
       echo espace($rang).$tab[$x][2]."<BR>";

       /*et on recherche ses fils
         en rappelant la fonction recur()
       (+ incrémentation du décallage)*/
       recur($tab,$tab[$x][0],$rang+1);
    }
  }
}

/*-------------------- MAIN -----------------------
  tableau des éléments de l´arbre:
    c´est un tableau à 2 dimensions.
    Une ligne représente un élément : data[$x]
    chaque ligne est décomposée en 3 données:
      - l´index de l´élément
      - l´index de l´élément parent
      - la chaîne à afficher
    ie: data[]= array (index, index parent, chaine )
*/
  //il faut d´abord déclarer un élément racine de l´arbre
  $data[] = array(0,-1,"racine");

  //puis tous les éléments enfants
  $data[] = array(1,0,"BOISSONS");
  $data[] = array(2,0,"ALIMENTS");
  $data[] = array(3,1,"Alcool");
  $data[] = array(4,1,"Sans alcool");
  $data[] = array(5,2,"Legumes");
  $data[] = array(6,5,"salades");
  $data[] = array(7,6,"batavia");
  $data[] = array(8,6,"laitue");
  $data[] = array(9,5,"carottes");
  $data[] = array(10,5,"tomates");
  $data[] = array(11,2,"viandes");
  $data[] = array(12,11,"Jambon");
  $data[] = array(13,11,"steack haché");
  $data[] = array(14,0,"DIVERS");
  $data[] = array(15,14,"Dentifrice");
  $data[] = array(16,14,"sacs poubelles");
  $data[] = array(17,14,"lessive");
  $data[] = array(18,3,"biere");
  $data[] = array(19,3,"porto");
  $data[] = array(20,4,"eau");

  //appelle de la fonction récursive (ammorce)
  //avec recherche depuis la racine.
  recur($data,0,0);

?>
 
Hits
DOCUMENTOS RELACIONDOS
1060
Proteger la dirección de correo.
1828
Medidor de la velocidad e carga de una imágen.
1135
Enviar un e-mail desde una página ASP.
2437
Abrir un fichero HTML y copiar el contenido a TXT.
3224
"Limpiar" un array.
1535
Abrir una ventana al cerrar al página.
1326
Obligar a visitar un banner.
1280
Aviso de la última actualización de la página.
1432
Cambiar un Enter por un BR (nl2br).
2957
Las variables GLOBALES.
1091
Cálculo de franjas de tiempo.
7298
Variables en PHP.
7071
No repetir una imagen de fondo.
1923
Evitar que una imágen quede en la Caché del navegador..
15477
Validar e-mail en JavaScript.
3348
Creación de un sistema de comentarios.
2157
Convertir Enteros a Binarios.
5230
Calcular DC de una cuenta bancaria.
925
Conversión de unidades de fluidos (liquidos).
7449
Funciones de archivos.


www.nociondigital.com - Todo para un mundo digital. Páginas Webs, Buscadores y Webmasters....