Pascal/Turbo Pascal - Árbol binario.

 
Vista:

Árbol binario.

Publicado por abdul (1 intervención) el 23/04/2012 11:02:30
hola gente, tengo una gran duda y es como se puede hacer la inserción en un árbol binario usando una pila, sin utilizar la recursividad.

Espero vuestra respuesta y gracias por vuestro interés.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Árbol binario.

Publicado por ramon (2158 intervenciones) el 26/04/2012 17:35:43
{Vamos a ver si esto te ayuda un poco los arboles binarios se realizan con punteros
espero que te sirva }

program arboles;
uses
crt;

type
ptnodo = ^nodo;
nodo = record
dat : real;
izq,der : ptnodo
end;
var
tecla : char;
ant, nuev : ptnodo;

function crear(ant, nuev : ptnodo; daten : real): ptnodo;
begin
if nuev = nil then
begin
new(nuev);
nuev^.izq := nil;
nuev^.der := nil;
nuev^.dat := daten;
if ant <> nil then
IF (daten < ant^.dat) then
ant^.izq := nuev
ELSE
ant^.der := nuev;
crear := nuev;
end
else
begin
if daten < nuev^.dat then
crear := crear(nuev, nuev^.izq, daten)
else
crear := crear(nuev, nuev^.der, daten);
end;
end;

procedure entrada;
var
dat : real;
begin
ant := nil;
repeat
gotoxy(2,2);write('Entre Dato : ');
readln(dat);
gotoxy(2,2);clreol;
if ant = nil then
ant := crear(ant, ant, dat)
else
nuev := crear(ant, ant, dat);
gotoxy(2,2);write('Dese Introducir Nas Datos [S/N]');
repeat
tecla := readkey;
until tecla in['s','S','n','N'];
gotoxy(2,2);clreol;
until tecla in['n','N'];
END;

procedure insertar;
VAR
dat : real;
begin
repeat
gotoxy(2,2);write('Entre dato : ');
readln(dat);
gotoxy(2,2);clreol;
if ant = nil then
ant := crear(ant,ant,dat)
else
nuev := crear(ant,ant,dat);
gotoxy(2,2);write('Desea Entrar Mas Datos [S/N]');
repeat
tecla := readkey;
until tecla in['s','S','n','N'];
gotoxy(2,2);clreol;
until tecla in['n','N'];
end;

procedure presenta(ant : ptnodo);
begin
if ant <> nil then
begin
gotoxy(1,1);write('Use Las Flechas [',chr(27), chr(26),']');
writeln;
repeat
write(' ',ant^.dat:8:2);
tecla := readkey;
if tecla = #80 then
ant := ant^.izq;
if tecla = #75 then
ant := ant^.der;
until (tecla = #27) or (ant = nil);
end;
end;

procedure menu;
var
tec : char;
sal : boolean;
begin
sal := false;
repeat
clrscr;
gotoxy(2,2);write('*** MENU GENERAL ***');
gotoxy(2,4);write(' 1 = Entrada ');
gotoxy(2,5);write(' 2 = Insertar ');
gotoxy(2,6);write(' 3 = Visualizar ');
gotoxy(2,7);write(' 4 = Salir ');
gotoxy(2,9);write(' <<< Elija Opcion >>> ');
tec := readkey;
clrscr;
case tec of
#49 : entrada;
#50 : insertar;
#51 : presenta(ant);
#52 : sal := true;
end;
until sal = true;
end;

begin
clrscr;
ant := nil;
menu;
if nuev <> nil then
dispose(nuev);
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar