Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/07/2011, 17:16
Avatar de goteen_mx
goteen_mx
 
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años
Puntos: 37
Respuesta: Problema con estructura de arbol

En si deben estar relacionados por el ID no por el valor que representa, se me ocurrio este ejemplo, este ejemplo NO es muy eficiente ya que se reccorren todos los nodos de niveles inferiores para conocer los hijos , pero dada tu estructura creo yo que en algun momento puedes tener más de un hijo en cada nodo. Espero y sea de tu utilidad.

Saludos.

Código Javascript:
Ver original
  1. <html>
  2. <head>
  3.     <script language="javascript">
  4.     var aPuestosPred=new Array();
  5.     function f_dibujaArbol(){
  6.         var vsArbol = "";  
  7.         //Estos deben de generarse desde el servidor
  8.         aPuestosPred[0] = [100,0,"padre"];
  9.         aPuestosPred[1] = [101,100,"hijo"];
  10.         aPuestosPred[2] = [108,100,"hijo 2"];
  11.         aPuestosPred[3] = [94,101,"nieto"];
  12.         aPuestosPred[4] = [95,108,"nieto"];
  13.         aPuestosPred[5] = [96,108,"nieto2"];
  14.         aPuestosPred[6] = [104,94,"biznieto"];
  15.         aPuestosPred[7] = [102,95,"biznieto"];
  16.         vsArbol = f_dibujaRama(aPuestosPred[0][0]);//se envia el id del nodo a dibuar los hijos
  17.         document.getElementById("div_arbol").innerHTML = vsArbol;
  18.     }
  19.    
  20.     function f_dibujaRama(id){
  21.         var vsHijo = aPuestosPred[f_buscaEnArray(id)][2] + " Padre:  " + aPuestosPred[f_buscaEnArray(id)][1] + " -- Id hijo:  " + aPuestosPred[f_buscaEnArray(id)][0] + "<br></br>";
  22.         var aHijos = f_fieneHijos(id);
  23.         var f_hijos="";
  24.         for(var i = 0; i < aHijos.length; i++)
  25.             f_hijos += "f_dibujaRama(" + aHijos[i] + ") +"; // de manera recursiva se llaman a los dibijar los hijos del nodo actual
  26.         if(f_hijos.length>0)
  27.             return vsHijo + eval(f_hijos.substring(0,f_hijos.length-1));
  28.         return vsHijo;
  29.     }
  30.    
  31.     function f_fieneHijos(id){
  32.         var vsHijos = new Array();
  33.         for(var i = 0; i < aPuestosPred.length; i++){
  34.             if(aPuestosPred[f_buscaEnArray(id)][0]==aPuestosPred[i][1])
  35.                 vsHijos.push(aPuestosPred[i][0]);
  36.         }
  37.         return vsHijos;
  38.     }
  39.    
  40.     function f_buscaEnArray(id){
  41.         for(var i = 0; i< aPuestosPred.length; i++){
  42.             if(aPuestosPred[i][0]==id)
  43.                 return i;
  44.         }
  45.         return -1;
  46.     }
  47.    
  48.     </script>
  49. </head>
  50. <body>
  51.     <div id="div_arbol"></div>
  52.     <input type="button" value="dibujaArbol" onclick="f_dibujaArbol();"/>
  53. </body>
  54. </html>
__________________
Born to be free.