APORTE - Arbol

APORTE - Arbol

Postby goosfancito » Sat Dec 05, 2020 11:00 pm

Luego de bastante tiempo logre lo que necesitaba,
les dejo el codigo para que lo usen modifiquen y aporten.

Para probar solamente use un array pero la idea es que ese "array" luego se lo tome desde un mysql.

Code: Select all  Expand view  RUN

METHOD inicializar()
   LOCAL aDatos := { }

   /*
   Transfiero un array, que tiene 4 posiciones,
   la primera es el texto que se va a mostrar en el arbol
   la segunda le paso un numero cualquiera que despues va a ser reemplazado por el hitem()
   la tercera es el INDICE, necesario para luego usarlo al momento de crear las ramas
   la cuarta le indica en que "rama" debe insertarse el item y tiene que estar ORDENADO
   */


   aDatos := { ;
               { "Raiz",   1, 1, 0 }, ;
               { "uno",    1, 2, 1 }, ;
               { "dos",    1, 3, 1 }, ;
               { "tres",   1, 4,  1 }, ;
               { "cuatro", 1, 5,  1 }, ;
               { "cinco",  1, 6, 2 }, ;
               { "seis",   1, 7, 3 }, ;
               { "siete",  1, 8, 3 }, ;
               { "ocho",   1, 9, 3 }, ;
               { "nueve",  1, 10,  5 }, ;
               { "diez",   1, 11,  5 }, ;
               { "once",   1, 12,  10 }, ;
               { "doce",   1, 13,  12 }, ;
               { "trece",  1, 14,  13 } ;
             }

   AAdd( ::aItems, ::oTree:ADD( aDatos[ 1 ][ 1 ] ) )

   aDatos[ 1 ][ 2 ] := ::aItems[ Len( ::aItems ) ]:hitem()
   ::recursivo( ::aItems[ 1 ], aDatos, 2, 1 )

   ::otree:expandall()

   RETURN ( NIL )

//---------------------------------------------------------------------------------------

METHOD recursivo( oItem, aDatos, nInicio, nIdNodo)
   LOCAL nPosicion

   DO WHILE nInicio <= Len( aDatos )
      IF ( nIdNodo == aDatos[ nInicio ][ 4 ] )    // A
         AAdd( ::aItems, oItem:ADD( aDatos[ nInicio ][ 1 ] ) )
         aDatos[ nInicio ][ 2 ] := ::aItems[ Len( ::aItems ) ]:hitem()
      ELSE
         nPosicion := AScan( aDatos, { | x | x[ 3 ] == aDatos[ nInicio ][ 4 ] } ) //B
         ::recursivo( ::aItems[ nPosicion ], aDatos, @nInicio, aDatos[ nInicio ][ 4 ] ) //C
      ENDIF
      nInicio ++
   ENDDO

   RETURN ( NIL )

//------------------------------------------------------------------------------

 
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: APORTE - Arbol

Postby Antonio Linares » Sun Dec 06, 2020 9:01 am

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 50 guests