PRÁCTICA 5. Estructura de datos Árbol binario


#Problema 1. Implementación dinámica de un árbol de cadenas.


UNIT ARBOL;


INTERFACE


  TYPE

     Persona = String;

     TArbol = ^Nodo;

     Nodo = Record

              info: Persona;

              izq, der: TArbol;

            end;


  { Crea un arbol vacio }

  PROCEDURE CrearArbol (var A: TArbol);


  { Genera un arbol a partir de dos subarboles y un elemento }

  FUNCTION ConstArbol (subi,subd: TArbol; e: Persona): TArbol;


  { Devuelve cierto si el arbol esta vacio }

  FUNCTION ArbolVacio (A: TArbol): Boolean;


  { Devuelve el subarbol izquierdo }

  FUNCTION SubIzq (A: TArbol): TArbol;


  { Devuelve el subarbol derecho }

  FUNCTION SubDer (A: TArbol): TArbol;


  { Devuelve el dato raiz del arbol }

  FUNCTION DatoRaiz (A: TArbol): Persona;


  { Busca el subarbol de A cuya raiz contiene la persona }

  PROCEDURE BuscaNodo (A: TArbol; e:Persona; Res: TArbol);



IMPLEMENTATION


  PROCEDURE CrearArbol (var A: TArbol);

  begin

    A := NIL;

  end;


  FUNCTION ConstArbol (subi,subd: TArbol; e: Persona): TArbol;

  var

    A: TArbol;

  begin

    new(A);

    A^.izq := subi;

    A^.der := subd;

    A^.info := e;

    ConstArbol := A;

  end;


  FUNCTION ArbolVacio (A: TArbol): Boolean;

  begin

    ArbolVacio := A=NIL;

  end;


  FUNCTION SubIzq (A: TArbol): TArbol;

  begin

    SubIzq := A^.Izq;

  end;


  FUNCTION SubDer (A: TArbol): TArbol;

  begin

    SubDer := A^.der;

  end;


  FUNCTION DatoRaiz (A: TArbol):Persona;

  begin

    DatoRaiz := A^.info;

  end;


  PROCEDURE BuscaNodo (A: TArbol; e: Persona; Res: TArbol);

  VAR

     Aux : TArbol;

     Encontrado : Boolean;

  BEGIN

       IF NOT Encontrado THEN BEGIN

          IF (NOT ArbolVacio(A)) THEN BEGIN

             IF DatoRaiz(A) = e THEN BEGIN

                Res := A;

                Encontrado := True

             END;

             BuscaNodo(SubIzq(A),e,Res);

             BuscaNodo(SubDer(A),e,Res)

          END

       END

  END;


END.


PROGRAM Prueba;


USES

    Arbol;


VAR

   Nom, Pad, Mad: Persona;

   A: TArbol;


BEGIN

     CrearArbol(A);

     REPEAT

           Write('Introduce el nombre del hijo ('' para fin): '); Readln(Nom);

           IF Pad <> '' THEN BEGIN

              Write('Introduce el nombre del padre   : '); Readln(Pad);

                   CrearArbol(APad);

              Write('Introduce el nombre de la madre : '); Readln(Mad);

              A := ConstArbol(Pad, Mad, Nom);



UNIT ARBOL;


INTERFACE


  TYPE

     persona = string;

     TIPOARBOL = ^NODO;

     NODO = record

              info: INTEGER;

              izq, der: TIPOARBOL;

            end;


  { Crea un arbol vacio }

  PROCEDURE CrearArbol (var A: TIPOARBOL);


  { Genera un arbol a partir de dos subarboles y un elemento }

  FUNCTION ConstArbol (subi,subd: TIPOARBOL; e: INTEGER): TIPOARBOL;


  { Devuelve cierto si el arbol esta vacio }

  FUNCTION ArbolVacio (A: TIPOARBOL): BOOLEAN;


  { Devuelve el subarbol izquierdo }

  FUNCTION SubIzq (A: TIPOARBOL): TIPOARBOL;


  { Devuelve el subarbol derecho }

  FUNCTION SubDer (A: TIPOARBOL): TIPOARBOL;


  { Devuelve el dato raiz del arbol }

  FUNCTION DatoRaiz (A: TIPOARBOL): INTEGER;


  { Busca el subarbol de A cuya raiz contiene la persona }

  FUNCTION BuscaNodo (A: TIPOARBOL; e:INTEGER): TIPOARBOL;



IMPLEMENTATION


  PROCEDURE CrearArbol (var A: TIPOARBOL);

  begin

    A := NIL;

  end;


  FUNCTION ConstArbol (subi,subd: TIPOARBOL; e: INTEGER): TIPOARBOL;

  var

    A: TIPOARBOL;

  begin

    new(A);

    A^.izq := subi;

    A^.der := subd;

    A^.info := e;

    ConstArbol := A;

  end;


  FUNCTION ArbolVacio (A: TIPOARBOL): BOOLEAN;

  begin

    ArbolVacio := A=NIL;

  end;


  FUNCTION SubIzq (A: TIPOARBOL): TIPOARBOL;

  begin

    SubIzq := A^.Izq;

  end;


  FUNCTION SubDer (A: TIPOARBOL): TIPOARBOL;

  begin

    SubDer := A^.der;

  end;


  FUNCTION DatoRaiz (A: TIPOARBOL):INTEGER;

  begin

    DatoRaiz := A^.info;

  end;




END.



Alojamiento con 500GB de espacio y 5000GB de ancho de banda por 4 euros al mes
Cómo contratar servicios de hosting con Dreamhost
Descuento, promocode para dreamhost de $50