Type Nodo valor As Integer izda As Nodo Ptr dcha As Nodo Ptr End Type Function createNodo(Byval v As Integer, Byval l As Nodo Ptr, Byval r As Nodo Ptr) As Nodo Ptr Dim nuevo As Nodo Ptr = 0 nuevo = Callocate(Len(Nodo)) nuevo->valor = v nuevo->izda = l nuevo->dcha = r Return nuevo End Function Function insertar(Byval v As Integer, n As Nodo Ptr) As Nodo Ptr If (n = 0) Then n = createNodo(v, 0, 0) Elseif (v < n->valor) Then n->izda = insertar(v, n->izda) Elseif (v > n->valor) Then n->dcha = insertar(v, n->dcha) End If Return n End Function Function encuentraMin(Byval n As Nodo Ptr) As Nodo Ptr If (n = 0) Then Return 0 While (n->izda <> 0) n = n->izda Wend Return n End Function Function encuentraMax(Byval n As Nodo Ptr) As Nodo Ptr If (n = 0) Then Return 0 While (n->dcha <> 0) n = n->dcha Wend Return n End Function Function preOrden(Byval n As Nodo Ptr) As Nodo Ptr If (n = 0) Then Return 0 Print (n->valor); preOrden(n->izda) preOrden(n->dcha) Return 0 End Function Function postOrden(Byval n As Nodo Ptr) As Nodo Ptr If (n = 0) Then Return 0 postOrden(n->izda) postOrden(n->dcha) Print (n->valor); Return 0 End Function Function enOrden(Byval n As Nodo Ptr) As Nodo Ptr If (n = 0) Then Return 0 enOrden(n->izda) Print (n->valor); enOrden(n->dcha) Return 0 End Function Function eliminarMin(n As Nodo Ptr) As Nodo Ptr If n = 0 Then Return 0 Dim As Nodo Ptr old = 0 If (n->izda <> 0) Then n->izda = eliminarMin(n->izda) Else old = n n = n->dcha Deallocate old End If Return n End Function Function eliminarMax(n As Nodo Ptr) As Nodo Ptr If n = 0 Then Return 0 Dim As Nodo Ptr old = 0 If (n->dcha <> 0) Then n->dcha = eliminarMax(n->dcha) Else old = n n = n->izda Deallocate old End If Return n End Function Function eliminar(Byval v As Integer, n As Nodo Ptr) As Nodo Ptr If n = 0 Then Return 0 Dim As Nodo Ptr old = 0 If v < n->valor Then n->izda = eliminar(v, n->izda) Elseif v > n->valor Then n->dcha = eliminar(v, n->dcha) Elseif (n->izda <> 0) And (n->dcha <> 0) Then n->valor = encuentraMax(n->izda)->valor n->izda = eliminarMax(n->izda) Else old = n n = Iif(n->izda = 0, n->dcha, n->izda) Deallocate old End If Return n End Function Dim raiz As Nodo Ptr = 0 raiz = insertar(10, raiz) raiz = insertar(11, raiz) raiz = insertar(5 , raiz) raiz = insertar(8 , raiz) raiz = insertar(2 , raiz) raiz = insertar(7 , raiz) Print "preOrder : "; preOrden(raiz) Print !"\postOrder : "; postOrden(raiz) Print !"\inOrder : "; enOrden(raiz) Print !"\nremoving 5 from tree\n" raiz = eliminar(5, raiz) Print "preOrder : "; preOrden(raiz) Print !"\postOrder : "; postOrden(raiz) Print !"\inOrder : "; enOrden(raiz)(root) Sleep