Foros del Web » Programando para Internet » PHP »

Recorrido de un arbol

Estas en el tema de Recorrido de un arbol en el foro de PHP en Foros del Web. Queria postear un codigo que hice sobre recorrido de arboles, lo posteo porque cuando busque una solucion no encontre nada asi que me puse a ...
  #1 (permalink)  
Antiguo 06/02/2009, 19:55
Avatar de gakutaru  
Fecha de Ingreso: agosto-2005
Ubicación: frente a mi NtbK
Mensajes: 239
Antigüedad: 18 años, 7 meses
Puntos: 6
Recorrido de un arbol

Queria postear un codigo que hice sobre recorrido de arboles, lo posteo porque cuando busque una solucion no encontre nada asi que me puse a cranear y lo resolvi, asi que por eso se los posteo :)
el arbol es de este tipo:

las restricciones son:
en la tabla los datos quedan asi:
a->b
a->c
a->d
b->e
b->f
c->h
d->j
f->g
f->i
j->n
g->k
i->l
l->m
las restricciones para el arbol son:
no pueden haber bucles:
ej: e->a //esto no puede ocurrir
que se ingresen datos ya existentes como
ej: a->g ; f->m

Ahora les pongo el codigo exactamente como lo programe, tiene muschos echo para q vean lo q hace, pero simplemente pueden leerlo un poco y limpiarlo.


lo que hace el codigo son 2 cosas:
1.- muestra a todos los hijos de algun padre x el que pregunten, si padre no es padre, no muestra nada
2.- muestra los hijos con sus respectivos padres, sobre el padre x el que preguntaron.



Código PHP:
<?
    $conexion 
mysql_connect("localhost""root""") or die ("kroketas de perro") ; 
    
mysql_select_db("PruebaJerarquia"$conexion); 
$sql2="SELECT * FROM jerarquia ";
$Resultado mysql_query($sql2,$conexion);
?>
muestro el contenido de la bd
<table border="1" align="top">
<tr><td width="200">padre</td><td width="200">hijo</td></tr>
<?
while($Arreglo=mysql_fetch_array($Resultado)){
?>
<tr><td width="200"><? echo $Arreglo[jefe]; ?></td><td width="200"><? echo $Arreglo[emp]; ?></td></tr>
<?
}
?>
</table>
<?
echo "voi a buscar los hijos de la variable ".$rec[0] ="a";
$z=$rec[0];
$x=0;
$i=1;
//la idea es q el x persiga al i mientras se ejecuta la consulta, cada ves q el x no tenga ijos ira asercandose mas y mas al i
//y a su ves mientras sigan habiendo hijos el i se alejara rapidamente del x, sin 'padre' no tiene hijos' el while no se ejecuta
// e i no se incrementa
do{
echo 
"<br>al inicio x = ".$x;
echo 
"<br> padre a revisar hijos ".$rec[$x];
$sql="SELECT * FROM jerarquia WHERE (jefe = '$rec[$x]')";
$res mysql_query($sql$conexion);
while(
$arr mysql_fetch_array($res)){ 
$padre[$x][$i] = $rec[$x];
echo 
"<br> hijo = ".$rec[$i] = $arr[emp];
echo 
"<br> fin while, rec = ".$rec[$i]."  i =".$i;
echo 
"<br> i = ".$i++;

}
//fin while
echo "<br>antes x = ".$x;
echo 
"<br>durante x = ".$x++;
echo 
"<br>despues x = ".$x;
}while(
$x<=$i);
//ahora muestro los hijos de $z q es el padre inicial
echo "<br> hijos de ".$z;
$j=0;//mostrar
while($j!=$i){
echo 
"<br>".$rec[$j];
$j++;
}
//ahora muestro a los padres correspondientes de sus hijos
$k=0;
$y=0;
while(
$y!=$i){
$k=0;
while(
$k!=$i){
if(
trim($padre[$y][$k]) != NULL){ //si es distinto de null es xq existe un padre valido a mostrar
echo "<br>el padre de ".$rec[$k]." es ";
echo 
$padre[$y][$k];
}
$k++;
}
//fin k
$y++;
}
//fin y
?>
anexo ademas la bd, lista para importar, la misma que usa el codigo de arriba

Código:
-- phpMyAdmin SQL Dump
-- version 2.10.3
-- 
-- Servidor: localhost
-- Tiempo de generación: 06-02-2009 a las 02:49:53
-- Versión del servidor: 5.0.51
-- Versión de PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Base de datos: `pruebajerarquia`
-- 

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `jerarquia`
-- 

CREATE TABLE `jerarquia` (
  `IdJerarquia` int(255) NOT NULL auto_increment,
  `jefe` varchar(255) NOT NULL,
  `emp` varchar(255) NOT NULL,
  PRIMARY KEY  (`IdJerarquia`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;

-- 
-- Volcar la base de datos para la tabla `jerarquia`
-- 

INSERT INTO `jerarquia` VALUES (1, 'a', 'b');
INSERT INTO `jerarquia` VALUES (2, 'a', 'c');
INSERT INTO `jerarquia` VALUES (3, 'a', 'd');
INSERT INTO `jerarquia` VALUES (4, 'b', 'e');
INSERT INTO `jerarquia` VALUES (5, 'b', 'f');
INSERT INTO `jerarquia` VALUES (6, 'c', 'g');
INSERT INTO `jerarquia` VALUES (7, 'd', 'h');
INSERT INTO `jerarquia` VALUES (8, 'g', 'i');
INSERT INTO `jerarquia` VALUES (9, 'g', 'j');
INSERT INTO `jerarquia` VALUES (10, 'y', 'z');
INSERT INTO `jerarquia` VALUES (11, 'y', 'x');
INSERT INTO `jerarquia` VALUES (12, 'y', 'w');
INSERT INTO `jerarquia` VALUES (13, 'w', 'q');
INSERT INTO `jerarquia` VALUES (14, 'w', 's');
INSERT INTO `jerarquia` VALUES (15, 's', 'k');
INSERT INTO `jerarquia` VALUES (16, 's', 'l');
INSERT INTO `jerarquia` VALUES (17, 'k', 'ñ');
INSERT INTO `jerarquia` VALUES (18, 'z', 'a1');
INSERT INTO `jerarquia` VALUES (19, 'z', 'a2');
INSERT INTO `jerarquia` VALUES (20, 'a1', 'a3');
INSERT INTO `jerarquia` VALUES (21, 'a2', 'a5');

Última edición por gakutaru; 17/03/2009 a las 19:05
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:44.