Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arboles Binarios de
Búsqueda (BB)
•Hay 2 formas de implementar un árbol binario
usando distintos recursos del lenguaje de
programación:
• Usar Apuntadores a Memoria
• Usar Arreglos de Registros (Cursor simulando
apuntadores)
Prog. 2 - 2022 1
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Objetivo:
1. Los datos son almacenados en la memoria (Nodo-
Arbol). Existe un único Nodo Raíz del Árbol.
2. Es un definición recursiva, cada nodo a su vez se
convierte en raíz de otro sub-arbol.
3. Cada Nodo tiene 2 apuntadores, uno al «hijo
izquierdo» y otro al «hijo derecho».
4. Solo se puede recorrer el árbol desde la raíz hacia
abajo.
5. No existe un apuntador inverso desde los hijos al nodo
padre.
Prog. 2 - 2022 2
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
unit ArbolesBinariosBusqueda;
Interface
Uses
Tipos, Dialogs, QueuesPointer, StackPointer, SysUtils, Variants;
Const
MAX = 10; // Solo para controlar la cantidad máxima de nodos del árbol
Nulo= Nil; // Indica una posición NO validad del Árbol (rama nula)
Type
PosicionArbol = ^NodoArbol; // Nodo creado por cada apuntador en memoria
NodoArbol = Object
Datos: TipoElemento;
HI, HD: PosicionArbol;
End;
Prog. 2 - 2022 3
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Arbol = Object
Private
Raiz: PosicionArbol; // Unica Entrada al Arbol
Q_Items: LongInt; // Cuenta la cantidad de Nodos del Arbol
TDatoDeLaClave: TipoDatosClave;
Size: LongInt;
Public // Rutinas Basicas del Arbol
Function Crear(avTipoClave: TipoDatosClave, alSize: LongInt): Errores;
Function EsVacio(): Boolean; // Sinonimo de arbol vacio
Function EsLleno(): Boolean;
Function RamaNula(P:PosicionArbol): Boolean; // Controla si un apuntador es nil
Function Recuperar(P:PosicionArbol): TipoElemento;
Function PreOrden(): String;
Function InOrden(): String;
Function PostOrden(): String;
Function Anchura(): String;
Function PreOrdenITE(): String;
Function Altura(): Integer;
Function Nivel(Q:PosicionArbol): LongInt;
Function HijoIzquierdo(P:PosicionArbol): PosicionArbol;
Function HijoDerecho(P:PosicionArbol): PosicionArbol;
Function Padre(Hijo:PosicionArbol): PosicionArbol;
Prog. 2 - 2022 4
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 6
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 7
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 8
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 11
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 12
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 13
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON APUNTADORES
Prog. 2 - 2022 15
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON CURSORES
unit ArbolesBinariosBusqueda;
Interface
Uses
Tipos, Dialogs, QueuesCursor, StackCursor, SysUtils, Variants;
Const
MIN = 1;
MAX = 10; // Tamaño Máximo del Cursor
Nulo= 0; // Indica una posición NO validad del Árbol (rama nula)
Type
PosicionArbol = LongInt; // Dirección de memoria de un nodo dentro del cursor
NodoArbol = Object
Datos: TipoElemento;
HI, HD: PosicionArbol;
End;
Prog. 2 - 2022 16
IMPLEMENTACION DE ARBOLES B.
BUSQUEDA CON CURSORES
Arbol = Object
Private
Cursor: Array Of NodoArbol;
Raiz, Libre: PosicionArbol; // Unica Entrada al Arbol
Q_Items: LongInt; // Cuenta la cantidad de Nodos del Arbol
TDatoDeLaClave: TipoDatosClave;
Size: LongInt;
Public // Rutinas Basicas del Arbol
Function Crear(avTipoClave: TipoDatosClave, alSize: LongInt): Errores;
Function EsVacio(): Boolean; // Sinónimo de árbol vacío
Function EsLleno(): Boolean;
Function RamaNula(P:PosicionArbol): Boolean; // Controla si un apuntador es nulo
Function Recuperar(P:PosicionArbol): TipoElemento;
Function PreOrden(): String;
Function InOrden(): String;
Function PostOrden(): String;
Function Anchura(): String;
Function PreOrdenITE(): String;
Function Altura(): Integer;
Function Nivel(Q:PosicionArbol): LongInt;