-
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
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.
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.