Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UNIT uArbol;
- INTERFACE
- USES uElem;
- TYPE
- TArbol = ^TNodo;
- TNodo = RECORD
- izq:TArbol;
- rai:TElem;
- der:TArbol;
- END;
- PROCEDURE CrearArbolVacio(VAR arbol:TArbol);
- FUNCTION EsArbolVacio(arbol:TArbol):boolean;
- PROCEDURE ConstruirArbol (VAR arbol:TArbol; i:TArbol; r:TElem; d:TArbol);
- FUNCTION Altura(arbol:TArbol):integer;
- FUNCTION NumNodos(arbol:TArbol):integer;
- FUNCTION NumHojas(arbol:TArbol):integer;
- FUNCTION Equilibrado(arbol:TArbol):boolean;
- PROCEDURE HijoDer(arbol:TArbol; VAR d:TArbol);
- PROCEDURE HijoIzq(arbol:TArbol; VAR i:TArbol);
- PROCEDURE Raiz(arbol:TArbol; VAR r:TElem);
- PROCEDURE Inorden(arbol:TArbol);
- PROCEDURE Postorden(arbol:TArbol);
- PROCEDURE Preorden(arbol:TArbol);
- {A partir de aquí, instrucciones de árbol binario de búsqueda}
- PROCEDURE InsertarOrdenado (VAR arbol:TArbol; elem:TElem);
- PROCEDURE Mayor (arbol:TArbol; VAR m:TElem);
- PROCEDURE Menor (arbol:TArbol; VAR men:TElem);
- FUNCTION Pertenece (arbol:TArbol; elem:TElem):boolean;
- PROCEDURE Eliminar (VAR arbol:TArbol; elem:TElem);
- IMPLEMENTATION
- PROCEDURE CrearArbolVacio(VAR arbol:TArbol);
- BEGIN
- arbol := NIL;
- END;{CrearArbolVacio}
- FUNCTION EsArbolVacio(arbol:TArbol):boolean;
- BEGIN
- EsArbolVacio := (arbol = NIL);
- END;{EsArbolVacio}
- PROCEDURE ConstruirArbol (VAR arbol:TArbol; i:TArbol; r:TElem; d:TArbol);
- BEGIN
- new(arbol);
- Asignar( arbol^.rai , r);
- arbol^.izq := i;
- arbol^.der := d;
- END;{ConstruirArbol}
- FUNCTION Altura(arbol:TArbol):integer;
- FUNCTION Maximo (a,b:integer):integer;
- BEGIN
- IF a>b THEN
- Maximo := a
- ELSE
- Maximo := b;
- END;{Maximo}
- BEGIN
- IF EsArbolVacio(arbol) THEN
- Altura := 0
- ELSE
- BEGIN
- Altura := 1 + Maximo( Altura(arbol^.izq) , Altura(arbol^.der) );
- END;{ELSE}
- END;{Altura}
- FUNCTION NumNodos(arbol:TArbol):integer;
- BEGIN
- IF EsArbolVacio(arbol) THEN
- NumNodos := 0
- ELSE
- BEGIN
- NumNodos := 1 + NumNodos(arbol^.izq) + NumNodos(arbol^.der);
- END;{ELSE}
- END;{NumNodos}
- FUNCTION NumHojas(arbol:TArbol):integer;
- BEGIN
- IF ( EsArbolVacio(arbol^.izq) ) AND ( EsArbolVacio(arbol^.der) ) THEN
- NumHojas := 1
- ELSE
- NumHojas := NumHojas(arbol^.izq) + NumHojas(arbol^.der);
- END;{NumHijos}
- FUNCTION Equilibrado(arbol:TArbol):boolean;
- BEGIN
- IF EsArbolVacio(arbol) THEN
- Equilibrado := TRUE
- ELSE
- Equilibrado := ( NumNodos(arbol^.izq) = NumNodos(arbol^.der) );
- END;{Equilibrado}
- PROCEDURE HijoDer(arbol:TArbol; VAR d:TArbol);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- d := arbol^.der;
- END;{HijoDer}
- PROCEDURE HijoIzq(arbol:TArbol; VAR i:TArbol);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- i := arbol^.izq;
- END;{HijoIzq}
- PROCEDURE Raiz(arbol:TArbol; VAR r:TElem);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- Asignar(r , arbol^.rai);
- END;{Raiz}
- PROCEDURE Inorden(arbol:TArbol);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- BEGIN
- Inorden(arbol^.izq);
- Mostrar(arbol^.rai);
- Inorden(arbol^.der);
- END;{IF}
- END;{Inorden}
- PROCEDURE Postorden(arbol:TArbol);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- BEGIN
- Postorden(arbol^.izq);
- Postorden(arbol^.der);
- Mostrar(arbol^.rai);
- END;{IF}
- END;{Postorden}
- PROCEDURE Preorden(arbol:TArbol);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- BEGIN
- Mostrar(arbol^.rai);
- Preorden(arbol^.izq);
- Preorden(arbol^.der);
- END;{IF}
- END;{Postorden}
- {A partir de aquí, instrucciones de árbol binario de búsqueda}
- PROCEDURE InsertarOrdenado (VAR arbol:TArbol; elem:TElem);
- VAR
- i,d:TArbol;
- BEGIN
- CrearArbolVacio(i);
- CrearArbolVacio(d);
- IF EsArbolVacio(arbol) THEN
- BEGIN
- ConstruirArbol(arbol , i , elem , d);
- END{IF}
- ELSE
- IF EsMayor( elem , arbol^.rai ) THEN
- InsertarOrdenado(arbol^.der , elem)
- ELSE
- IF EsMayor( arbol^.rai , elem) THEN
- InsertarOrdenado(arbol^.izq , elem);
- END;{InsertarOrdenado}
- PROCEDURE Mayor (arbol:TArbol; VAR m:TElem);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- IF arbol^.der = NIL THEN
- m := arbol^.rai
- ELSE
- Mayor(arbol^.der , m);
- END;{Mayor}
- PROCEDURE Menor (arbol:TArbol; VAR men:TElem);
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- IF arbol^.izq = NIL THEN
- men := arbol^.rai
- ELSE
- Menor(arbol^.izq , men);
- END;{Mayor}
- FUNCTION Pertenece (arbol:TArbol; elem:TElem):boolean;
- BEGIN
- IF EsArbolVacio(arbol) THEN
- Pertenece := FALSE
- ELSE
- IF EsMayor(elem , arbol^.rai) THEN
- Pertenece(arbol^.der , elem)
- ELSE
- IF EsMayor( arbol^.rai , elem) THEN
- Pertenece(arbol^.izq , elem)
- ELSE
- Pertenece := TRUE;
- END;{Pertenece}
- PROCEDURE Eliminar (VAR arbol:TArbol; elem:TElem);
- VAR
- aux:TArbol;
- min:TElem;
- BEGIN
- IF NOT(EsArbolVacio(arbol)) THEN
- BEGIN
- IF Iguales(arbol^.rai , elem) THEN
- IF EsArbolVacio(arbol^.der) THEN
- BEGIN
- aux := arbol;
- arbol := arbol^.izq;
- dispose(aux);
- END{IF}
- ELSE
- IF EsArbolVacio(arbol^.izq) THEN
- BEGIN
- aux := arbol;
- arbol := arbol^.der;
- dispose(aux);
- END{IF}
- ELSE
- BEGIN
- Menor(arbol^.der , min);
- Asignar(arbol^.rai , min);
- Eliminar(arbol^.der , min);
- END{ELSE}
- ELSE
- IF EsMayor( elem , arbol^.rai) THEN
- Eliminar(arbol^.der , elem)
- ELSE
- Eliminar(arbol^.izq , elem);
- END; {IF}
- END; {Eliminar}
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement