FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour APORTE - Arbol
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
APORTE - Arbol
Posted: 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 (fw): Select all Collapse
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/
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: APORTE - Arbol
Posted: Sun Dec 06, 2020 09:01 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion