• Lenguaje

    Pascal

  • Descripción

    Implementa la estructura de datos de tipo árbol binario.
    Inserta y elimina cadenas al árbol.
    Muestra el recorrido en preorden, inorden y postorden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
program prog_arbol;
uses crt;

type Arbol = ^TDAArbol;
TDAArbol = record
    izq, der : Arbol;
    cadena : string;
end;

function arbol_insertar (nodo : Arbol; cadena : string) : Arbol;
    begin
        if nodo = nil then
            begin
                new (nodo);
                nodo^.izq := nil;
                nodo^.der := nil;
                nodo^.cadena := cadena;
            end
        else
            if cadena < nodo^.cadena then
                nodo^.izq := arbol_insertar (nodo^.izq, cadena)
            else
                nodo^.der := arbol_insertar (nodo^.der, cadena);
        arbol_insertar := nodo;
    end;

function arbol_quitar (nodo : Arbol; cadena : string) : Arbol;
    var pivote : Arbol;
    begin
        if nodo <> nil then
            begin
                if nodo^.cadena = cadena then
                    begin
                        if nodo^.izq = nil then
                            pivote := nodo^.der
                        else if nodo^.der = nil then
                            pivote := nodo^.izq
                        else
                            begin
                                pivote := nodo^.izq;
                                while pivote^.der <> nil do
                                    pivote := pivote^.der;
                                pivote^.der := nodo^.der;
                                pivote := nodo^.izq;
                            end;
                        dispose (nodo);
                        nodo := pivote;
                    end
                else if cadena < nodo^.cadena then
                    nodo^.izq := arbol_quitar (nodo^.izq, cadena)
                else
                    nodo^.der := arbol_quitar (nodo^.der, cadena);
            end;
        arbol_quitar := nodo;
    end;

procedure arbol_preorden (nodo : Arbol);
    begin
        if nodo <> nil then
            begin
                writeln (nodo^.cadena);
                arbol_preorden (nodo^.izq);
                arbol_preorden (nodo^.der);
            end;
    end;

procedure arbol_inorden (nodo : Arbol);
    begin
        if nodo <> nil then
            begin
                arbol_inorden (nodo^.izq);
                writeln (nodo^.cadena);
                arbol_inorden (nodo^.der);
            end;
    end;

procedure arbol_postorden (nodo : Arbol);
    begin
        if nodo <> nil then
            begin
                arbol_postorden (nodo^.izq);
                arbol_postorden (nodo^.der);
                writeln (nodo^.cadena);
            end;
    end;

var raiz : Arbol;
var opcion, tecla : char;
var cadena : string;
begin
    raiz := nil;
    repeat
        clrscr;
        writeln ('MEN'#233);
        writeln ('1.- Insertar cadena');
        writeln ('2.- Quitar cadena');
        writeln ('3.- Listado en preorden');
        writeln ('4.- Listado en inorden');
        writeln ('5.- Listado en postorden');
        writeln ('6.- Salir'#10#13);
        write ('Seleccione una opci'#162'n: ');
        repeat
            opcion := readkey;
        until (opcion >= '1') and (opcion <= '6');
        writeln (opcion, #10#13);
        if (raiz = nil) and (opcion <> '1') and (opcion <> '6') then
            writeln ('El '#160'rbol est'#160' vac'#161'o.')
        else case opcion of
            '1':
                begin
                    write ('Ingrese el cadena a insertar: ');
                    readln (cadena);
                    raiz := arbol_insertar (raiz, cadena);
                    writeln (#10#13'Cadena agregada correctamente.');
                end;
            '2':
                begin
                    write ('Ingrese el cadena a quitar: ');
                    readln (cadena);
                    raiz := arbol_quitar (raiz, cadena);
                    writeln (#10#13'Cadena borrada correctamente.');
                end;
            '3': arbol_preorden  (raiz);
            '4': arbol_inorden   (raiz);
            '5': arbol_postorden (raiz);
        end;
        if opcion <> '6' then
            begin
                write (#10#13'Presione una tecla para continuar . . . ');
                tecla := readkey;
            end
    until opcion = '6';
end.