Spanish Árboles Binarios.

josejad

Expert
Licensed User
Longtime User
Hola Carlos:

No los he usado nunca en B4A (y creo que desde que los vi en la carrera, jeje), pero sí recuerdo haber visto algunos ejemplos en el foro, que si haces una búsqueda aparecen, hay una pequeña clase (Class) de Erel y algunos ejemplos básicos

 

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola José

Como no encontré mayor información sobre como hacer una lista doblemente enlazada, me puse a cacharrear y esto es lo que hasta ahora he hecho.

El código crea 1000 nodos y los enlaza.

Este es el código:

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
   
    'Creando un tipo de dato Nodo
    Type Node (Id As Int, Largo As Int, Anterior As Node, Siguiente As Node)
   
    Dim Raiz As Node
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
   
    'Creamos el nodo raiz
    Raiz = CreaNodo(Rnd(1, 20))
End Sub

Sub Activity_Resume
   
    'Creamos una lista de 1000 nodos
    For i = 0 To 1000 Step 1
        InsertaNodo(Raiz, CreaNodo(Rnd(1,30)))
    Next
   
    ToastMessageShow ("Hecho!", True)
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Private Sub InsertaNodo(NodoRaiz As Node, Nodo As Node)
    Dim UltimoNodo As Node
    UltimoNodo.Initialize
   
    UltimoNodo = RetornaUltimoNodo(NodoRaiz)
    UltimoNodo.Siguiente = Nodo
End Sub

Private Sub RetornaUltimoNodo(Nodo As Node) As Node
    Dim UltimoNodo As Node
   
    If Nodo.siguiente <> Null Then
        UltimoNodo = RetornaUltimoNodo(Nodo.Siguiente)
    Else
        UltimoNodo = Nodo
    End If

    Return UltimoNodo
End Sub

Private Sub CreaNodo(Largo As Int) As Node
    Dim NuevoNodo As Node
    NuevoNodo.Initialize
   
    NuevoNodo.Id = GetNewId
    NuevoNodo.Largo = Largo
    NuevoNodo.Anterior = Null
    NuevoNodo.Siguiente = Null
   
    Return NuevoNodo
End Sub

Private Sub GetNewId() As Int
    Return Rnd(1, 100)
End Sub

Todo esto es el inicio de un pequeño reto que me pusieron, el cual pondré en nuevo post.
 
Top