program ArbolBinarioTresArreglos;
const
MAX_NODOS = 100;
type
ArbolBinario = record
Llave: array[1..MAX_NODOS] of Integer;
HijoIzquierdo: array[1..MAX_NODOS] of Integer;
HijoDerecho: array[1..MAX_NODOS] of Integer;
Raiz: Integer;
end;
procedure InicializarArbol(var arbol: ArbolBinario);
var
i: Integer;
begin
for i := 1 to MAX_NODOS do
begin
arbol.Llave[i] := 0;
arbol.HijoIzquierdo[i] := 0;
arbol.HijoDerecho[i] := 0;
end;
arbol.Raiz := 0;
end;
procedure InsertarNodo(var arbol: ArbolBinario; nuevaLlave: Integer);
var
nuevoNodo, actual, padre: Integer;
begin
nuevoNodo := 1;
while (arbol.Llave[nuevoNodo] <> 0) do
begin
padre := nuevoNodo;
if nuevaLlave < arbol.Llave[nuevoNodo] then
nuevoNodo := arbol.HijoIzquierdo[nuevoNodo]
else
nuevoNodo := arbol.HijoDerecho[nuevoNodo];
end;
arbol.Llave[nuevoNodo] := nuevaLlave;
arbol.HijoIzquierdo[nuevoNodo] := 0;
arbol.HijoDerecho[nuevoNodo] := 0;
if arbol.Raiz = 0 then
arbol.Raiz := nuevoNodo
else if nuevaLlave < arbol.Llave[padre] then
arbol.HijoIzquierdo[padre] := nuevoNodo
else
arbol.HijoDerecho[padre] := nuevoNodo;
end;
procedure MostrarArbolEnOrden(arbol: ArbolBinario; nodoActual: Integer);
begin
if nodoActual <> 0 then
begin
MostrarArbolEnOrden(arbol, arbol.HijoIzquierdo[nodoActual]);
Write(arbol.Llave[nodoActual], ' ');
MostrarArbolEnOrden(arbol, arbol.HijoDerecho[nodoActual]);
end;
end;
var
miArbol: ArbolBinario;
llaves: array[1..MAX_NODOS] of Integer = (50, 30, 70, 20, 40, 60, 80);
begin
InicializarArbol(miArbol);
for i := 1 to Length(llaves) do
InsertarNodo(miArbol, llaves[i]);
writeln('Árbol binario en orden:');
MostrarArbolEnOrden(miArbol, miArbol.Raiz);
readln;
end.