Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Documentos relacionados
4. Pilas ESTRUCTURAS DE DATOS 1

ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

TEMA 2 Estructuras de datos lineales

Descubrir los árboles como paradigma de los tipos Recursivos de Datos

El TAD Árbol. El TAD Árbol

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Estructura de datos y de la información Boletín de problemas - Tema 10

Tema 09: TAD Árbol binario

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Estructuras de Datos ARBOLES Y GRAFOS

Estructura de Datos y de la Información

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Estructura de Datos Unidad 6: ARBOLES

Definición recursiva de los árboles

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Árboles y esquemas algorítmicos. Tema III

Árbol ABB equilibrado. Lección: Árboles. Algorítmica II (Tema 4) Lenguajes y Sistemas Informáticos, Universidad Pablo de Olavide 1/ 58

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

Estructura de Datos. Índice

Estructuras de Datos y Algoritmos

Francisco J. Hernández López

Algoritmos y Estructuras de Datos. Guillermo Román Díez

Estructuras de datos: Árboles binarios de

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Francisco J. Hernández López

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

Programación de sistemas Árboles

Examen de Programación 2 Diciembre de 2012

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Estructura de Datos. Unidad V Estructuras no lineales estáticas y dinámicas. (Árboles y grafos)

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

Capítulo 8. Árboles. Continuar

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Algoritmos y Programación II Curso 2006

Árboles Binarios Ordenados Árboles AVL

ESTRUCTURAS DE DATOS Y ALGORITMOS

Tema 14: ÁRBOLES Algoritmos y estructuras de datos I - Tema 14 1

3. ESTRUCTURAS DE DATOS NO LINEALES

CAPÍTULO 2. ÁRBOLES 2.0. CONCEPTOS GENERALES

Tema 4. Estructuras no lineales de datos: árboles

Algorítmica y Complejidad. Tema 3 Ordenación.

Introducción a los árboles. Lección 11

Programación II Arboles Binarios(AB)

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Programación Estructuras Arborescentes

Listas Posicionales. Listas posicionales

Programación II Árboles binarios de búsqueda (ABB)

Tema 2: Grafos y Árboles. Algoritmos y Estructuras de Datos 3

Tema 6: Estructuras de datos recursivas

Para la resolución de los ejercicios, se dispone de una implementación de árbol binario a través de la clase BinTree con la siguiente especificación.

Estructura de Datos Tema 6. Árboles. Contenido 14/06/2018

FUNDAMENTOS DE PROGRAMACIÓN Datos recursivos II

Tema 10: Árbol binario de búsqueda

Arboles. Definiciones formales: 1) un árbol es un grafo acíclico finito T (P, E) tal que. P = E + 1 => todo arco es desconectante.

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 5: Árboles. Prof. Montserrat Serrano Montero

Introducción a Árboles Árboles Binarios

Programación Declarativa Universidad de Málaga

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Tema: ARBOLES. Instructor: MC. Gerardo Gálvez Gámez Junio de 2018 INTRODUCCIÓN:

Tema 7: Árbol Binario

Bloque III: Estructuras de datos no lineales

Arboles Binarios de Búsqueda en C++

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la

Estructuras de datos utilizando JAVA

12/08/2017 AVL. Especificación sobre árboles AVL. AVL: rotaciones

INGENIERIA DE SISTEMAS 19 ESTRUCTURAS DE DATOS (Listas simples) ARBOLES

Estructuras de datos y algoritmos

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

Tema: Arboles en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Definición de Árbol Binario. Programación IV. Guía No.

Tema: Métodos de Ordenamiento. Parte 3.

Definición: NODO Un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar.

Programación de sistemas

Diseño y Análisis de Algoritmos con Java(I Sem. 2004) Prof. Dr.Eric Jeltsch F.

Estructura de Datos. Estructuras de Datos no lineales : Árboles

Definición de árbol. Árboles

Estructura de Datos. Árboles. Árboles. Primer Semestre, 2010 ÍNDICE DE CONTENIDOS

324 MR Versión 1 1 Prueba Integral 1/6 Lapso UNIVERSIDAD NACIONAL ABIERTA Semana 12 VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

B) Contestar Verdadero o Falso a las siguientes preguntas, justificando la respuesta:

2. Desarrolla una especificación informal genérica para el TAD árbol binario. Incluir operaciones para crear y modificar el árbol.

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo.

Tema: Métodos de Ordenamiento. Parte 3.

Algoritmos y estructuras de datos

Capitulo VI Árboles y Grafos

Introducción a Árboles Árboles Binarios

Transcripción:

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Contenidos Definiciones Conceptos de Árboles Binarios Especificación algebraica Implementaciones Programación con Árboles Binarios Árboles Binarios de Búsqueda Introducción Especificación e Implementación Árboles equilibrados ED 2

Definiciones Un árbol es una estructura que organiza sus elementos formando jerarquías entre sus elementos (nodos) Pueden representar relaciones Relación clave: padre/hijo (ascendiente/descendiente) Nodos unidos por aristas o ramas (edges) Nodos sin descendientes: Hojas o nodos terminales Nodos: raíz, padre, hijo, hermano, hoja ED 3

Definiciones Un árbol enraizado tiene un nodo raíz (root) y otros nodos conectados en parejas por ramas Cada nodo, excepto el raíz, es conectado por una única rama a su nodo padre (antecesor). Cada nodo, excepto las hojas (leaf node), tiene uno o más hijos ED 4

Definiciones Definición recursiva: Un árbol se compone de una colección de nodos Esta colección puede estar vacía (árbol vacío) Nodo raíz y cero o más subárboles Cada raíz de los subárboles es hijo del nodo raíz inicial y está conectado mediante una rama ED 5

Definiciones Definición recursiva: r S 1 S 2 S 3 S 4 ED 6

Definiciones Camino: Secuencia de nodos n 1,n 2,n 3,...,n k siendo n i padre de n i+1, conectados dentro de un árbol 6 4 1 2 3 7 5 8 9 Camino entre el nodo 2 y el 7: 2, 4 y 7 10 11 Longitud del camino entre el nodo 2 y el 7: 2 Longitud de un camino: número de aristas que unen el camino ED 7

Definiciones Grado (aridad) de un nodo: número de hijos del nodo 6 4 1 2 3 7 5 8 9 Grado del nodo 4: 2 Grado del nodo 7: 0 10 11 Grado del árbol: 2 Grado (aridad) de un árbol: Máximo grado de sus nodos ED 8

Definiciones Altura o profundidad de un árbol: Longitud del camino desde el nodo raíz a su hoja más lejana (o # nodos) 6 4 1 2 3 7 5 8 9 Altura del árbol: 6 (si la raíz tiene altura 1) 10 11 Nivel del nodo 6: 4 Nivel o profundidad de un nodo: longitud entre la raíz del árbol y dicho nodo (0 ó 1 para el nodo raíz) ED 9

Conceptos de Árboles Binarios Árboles Binarios Particularización de un árbol cuyos padres no tienen más de 2 hijos r A B C S i S d D ED 10

Conceptos de Árboles Binarios Hijos de un nodo son: hijo izquierdo, hijo derecho 1 1 2 3 3 2 Profundidad del árbol binario promedio es mucho menor que n árboles binarios de búsqueda ED 11

Especificación algebraica ESPECIFICACIÓN ArbolesBinarios PARÁMETROS GENÉRICOS TIPOS TipoElemento FIN PARAMETROS TIPOS TipoArbolBin OPERACIONES (* constructoras generadoras *) CrearArbolBinVacio: TipoArbolBin ConstruirArbolBin: TipoArbolBin x TipoElemento x TipoArbolBin TipoArbolBin ED 12

Especificación algebraica (* observadoras selectoras *) PARCIAL Raiz: TipoArbolBin TipoElemento PARCIAL HijoIzdo: TipoArbolBin TipoArbolBin PARCIAL HijoDcho: TipoArbolBin TipoArbolBin (* observadoras no selectoras *) EsArbolBinVacio: TipoArbolBin Booleano VARIABLES r: TipoElemento; i, d: TipoarbolBin; ECUACIONES DE DEFINITUD DEF(Raiz(ConstruirArbolBin(i, r, d))) DEF(HijoIzdo(ConstruirArbolBin(i, r, d))) DEF(HijoDcho(ConstruirArbolBin(i, r, d))) ED 13

Especificación algebraica ECUACIONES (* observadoras selectoras *) Raiz(ConstruirArbolBin(i, r, d)) = r HijoIzq(ConstruirArbolBin(i, r, d)) = i HijoDer(ConstruirArbolBin(i, r, d)) = d (* observadoras no selectoras *) EsArbolBinVacio(CrearArbolBinVacio) = CIERTO EsArbolBinVacio(ConstruirArbolBin(i, r, d)) = FALSO FIN ESPECIFICACIÓN ED 14

Especificación algebraica ESPECIFICACIÓN ArbolesBinariosExtension USA ArbolesBinarios OPERACIONES (* observadoras no selectoras *) NumNodos: TipoArbolBin Natural NumHojas: TipoArbolBin Natural Altura: TipoArbolBin Natural Compensado: TipoArbolBin Booleano NivelElemento: TipoElemento x TipoArbolBin Natural ED 15

Especificación algebraica (* constructoras no generadoras *) Espejo: TipoArbolBin TipoArbolBin VARIABLES e, r: TipoElemento; i, d: TipoArbolBin; ECUACIONES (* observadoras no selectoras *) NumNodos(CrearArbolBinVacio) = 0 NumNodos(ConstruirArbolBin(i, r, d)) = 1 + NumNodos(i) + NumNodos(d) ED 16

Especificación algebraica NumHojas(CrearArbolBinVacio) = 0 NumHojas(ConstruirArbolBin(i, r, d)) = SI EsArbolBinarioVacio(i) Y EsArbolBinarioVacio(d) 1 NumHojas(i) + NumHojas(d) Altura(CrearArbolBinVacio) = 0 Altura(ConstruirArbolBin(i, r, d)) = 1 + Maximo(Altura(i), Altura(d)) Compensado(CrearArbolBinVacio) = CIERTO Compensado(ConstruirArbolBin(i, r, d)) = (NumNodos(i) = NumNodos(d)) ED 17

Especificación algebraica NivelElemento(e, CrearArbolBinVacio) = 0 NivelElemento(e, ConstruirArbolBin(i,r,d)) = SI e=r 1 SI NivelElemento(e, i)>0 Y NivelElemento(e, d)>0 1 + Minimo(NivelElemento(e, i),nivelelemento(e, d)) SI NivelElemento(e, i)=0 Y NivelElemento(e, d)=0 0 1 + Maximo(NivelElemento(e, i), NivelElemento(e, d)) (* constructoras no generadoras *) Espejo(CrearArbolBinVacio) = CrearArbolBinVacio Espejo(ConstruirArbolBin(i, r, d)) = ConstruirArbolBin(Espejo(d), r, Espejo(i)) FIN ESPECIFICACIÓN ED 18

Implementaciones Mediante punteros y variables dinámicas TApuntadorArbol = ^TNodo; TNodo = RECORD elemento: TipoElemento; izquierdo, derecho: TApuntadorArbol; END; TipoArbol = TApuntadorArbol; Mediante vectores Simulando memoria dinámica ED 19

Recorridos Preorden (RID) 1 Inorden (IRD) 2 3 2 1 3 Postorden (IDR) 3 1 2 ED 20

Especificación algebraica ESPECIFICACIÓN RecorridosArbolesBinarios USA ArbolesBinarios, Listas OPERACIONES (* observadoras no selectoras *) Preorden : TipoArbolBin TipoLista Inorden : TipoArbolBin TipoLista Postorden : TipoArbolBin TipoLista Frontera : TipoArbolBin TipoLista VARIABLES r: TipoElemento; i, d: TipoArbolBin; ED 21

Especificación algebraica ECUACIONES (* observadoras no selectoras *) Preorden(CrearArbolBinVacio) = CrearVacia Preorden(ConstruirArbonBin(i, r, d)) = Construir(r, Concatenar(Preorden(i), Preorden(d))) Inorden(CrearArbolBinVacio) = CrearVacia Inorden(ConstruirArbolBin(i, r, d)) = Concatenar(Inorden(i), Construir(r, Inorden(d))) Postorden(CrearArbolBinVacio) = CrearVacia Postorden(ConstruirArbolBin(i, r, d)) = InsertarFinal(r, Concatenar(Portorden(i), Portorden(d))) Frontera(CrearArbolBinVacio) = CrearVacia Frontera(ConstruirArbolBin(i, r, d) = SI EsArbolBinVacio(i) Y EsArbolBinVacio(d) Construir(r, CrearVacia) Concatenar(Frontera(i), Frontera(d)) FIN ESPECIFCACIÓN ED 22

Implementación UNIT ABinP; INTERFACE USES ELEMTAD; TYPE TipoArbolBin = ^TipoNodo; TipoNodo = RECORD r: TipoElemento; izq, der: TipoArbolBin; END; { CONSTRUCTORAS GENERADORAS } PROCEDURE CrearArbolVacio(VAR a:tipoarbolbin); (* POST: CrearArbolVacio= () *) PROCEDURE ConstruirArbolBin(VAR a: TipoArbolBin; izq: TipoArbolBin; r:tipoelemento; der: TipoArbolBin); (* POST: a= (izq) r (der) *) ED 23

Implementación { OBSERVADORAS NO SELECTORAS } FUNCTION EsArbolBinVacio(a: TipoArbolBin): Boolean; { POST: a = ()} { OBSERVADORAS SELECTORAS } PROCEDURE Raiz(a: TipoArbolBin; VAR e: TipoElemento); { PRE: a = (izq) r (der) POST: e <- r} PROCEDURE HijoIzq(a: TipoArbolBin; VAR hizq: TipoArbolBin); { PRE: a = (izq) r (der) POST: hizq <- izq } PROCEDURE HijoDer(a: TipoArbolBin; VAR hder: TipoArbolBin); { PRE: a = (izq) r (der) POST: hder <- der} ED 24

Implementación IMPLEMENTATION { CONSTRUCTORAS GENERADORAS } PROCEDURE CrearArbolVacio(VAR a: TipoArbolBin); { Complejidad: O(1)} BEGIN a:=nil END; PROCEDURE ConstruirArbolBin(VAR a: TipoArbolBin; izq: TipoArbolBin; r:tipoelemento; der: TipoArbolBin); { Complejidad: O(1)} BEGIN New(a); Asignar(a^.r,r); a^.izq:=izq; a^.der:=der END; ED 25

Implementación { OBSERVADORAS NO SELECTORAS } FUNCTION EsArbolBinVacio(a:TipoArbolBin):Boolean; { Complejidad: O(1)} BEGIN EsArbolBinVacio:= (a = NIL) END; { OBSERVADORAS SELECTORAS } PROCEDURE Raiz(a: TipoArbolBin; VAR e: TipoElemento); { Complejidad: O(1)} BEGIN Asignar(e,a^.r) END; ED 26

Implementación PROCEDURE HijoIzq(a: TipoArbolBin; VAR hizq: TipoArbolBin); { Complejidad: O(1)} BEGIN hizq := a^.izq END; PROCEDURE HijoDer(a: TipoArbolBin; VAR hder: TipoArbolBin); { Complejidad: O(1)} BEGIN hder := a^.der END; END. ED 27

Programación con Árboles Binarios Contar número de nodos Contar el número de hojas Decir si dos árboles son iguales Pertenencia de un elemento a un árbol Construir imagen especular Calcular la profundidad de un árbol Ver si un árbol está equilibrado Calcular el nivel en el que aparece un nodo en un árbol ED 28

Árboles Binarios de Búsqueda Introducción Especificación Algebraica Implementación Árboles equilibrados: Árboles AVL ED 29

Introducción Particularización de un árbol binario donde sus nodos están ordenados en función del elemento que contienen Para cada nodo X, los valores de los elementos de su subárbol izquierdo son menores que el de X y los del derecho son mayores que el de X Se consigue una ordenación consistente ED 30

Especificación algebraica ESPECIFICACIÓN ArbolesBinariosBusqueda USA ArbolesBinarios PARAMETROS GENERICOS OPERACIONES Mayor: TipoElemento x TipoElemento Booleano FIN PARAMETROS OPERACIONES (* observadoras no selectoras *) Pertenece : TipoArbolBin x TipoElemento Booleano PARCIAL Minimo: TipoArbolBin TipoElemento (* constructoras no generadoras *) Insertar: TipoElemento x TipoArbolBin TipoArbolBin Eliminar: TipoElemento x TipoArbolBin TipoArbolBin ED 31

Especificación algebraica (* Para trabajar con árboles binarios de búsqueda el usuario deberá utilizar exclusivamente las constructoras CrearArbolBinVacio, Insertar y Eliminar *) VARIABLES r, e: TipoElemento; i, d: TipoArbolBin; ECUACIONES DE DEFINITUD DEF(Minimo(ConstruirArbolBin(i, r, d))) ECUACIONES (* observadoras no selectoras *) Pertenece (e, CrearArbolBinVacio) = FALSO Pertenece (e, ConstruirArbolBin(i, r, d)) = SI e=r CIERTO SI Mayor(e, r) Pertenece(e, d) Pertenece(e, i) ED 32

Especificación algebraica Minimo(ConstruirArbolBin(i, r, d)) = SI EsArbolBinVacio(i) r Minimo(i) (* constructoras no generadoras *) Insertar(e, CrearArbolBinVacio)= ConstruirArbolBin(CrearArbolBinVacio, e, CrearArbolBinVacio) Insertar(e, ConstruirArbolBin(i, r, d)) = SI e=r ConstruirArbolBin(i, r, d) SI Mayor(e, r) ConstruirArbolBin(i, r, Insertar(e, d)) ConstruirArbolBin(Insertar(e, i), r, d) ED 33

Especificación algebraica Eliminar(e, CrearArbolBinVacio) = CrearArbolBinVacio Eliminar(e, ConstruirArbolBin(i, r, d)) = SI e=r SI EsArbolBinVacio(d) i ConstruirArbolBin(i, Minimo(d), Eliminar(Minimo(d), d)) SI Mayor(e, r) ConstruirArbolBin(i, r, Eliminar(e, d)) ConstruirArbolBin(Eliminar(e, i), r, d) FIN ESPECIFICACIÓN ED 34

Implementación UNIT ABINBUS; INTERFACE USES ELEMTAD,ABIN; (* CONSTRUCTORAS NO GENERADORAS *) PROCEDURE Insertar(VAR a: TipoArbolBin; e: TipoElemento); {PRE: Cierto} {POST: Insertamos el elemento e si no está ya en el árbol} PROCEDURE Eliminar(VAR a: TipoArbolBin; e: TipoElemento); {PRE: No definido para Árbol vacío} {POST: Eliminamos el elemento e del árbol binario} ED 35

Implementación (* OBSERVADORAS NO SELECTORAS *) FUNCTION Pertenece(a: TipoArbolBin; e: TipoElemento): Boolean; {PRE: Cierto} {POST: Determina si e está en el árbol} PROCEDURE Minimo(a: TipoArbolBin; VAR e: TipoElemento); {PRE: Cierto} {POST: Devolvemos en e el menor elemento del árbol} PROCEDURE Maximo(a: TipoArbolBin; VAR e: TipoElemento); {PRE: Cierto} {POST: Devolvemos en e el mayor elemento del árbol} ED 36

Implementación IMPLEMENTATION (* CONSTRUCTORAS NO GENERADORAS *) PROCEDURE Insertar(VAR a: TipoArbolBin; e: TipoElemento); { Complejidad: O(n)} VAR r: TipoElemento; avacio: TipoArbolBin; BEGIN CrearArbolVacio(aVacio); IF EsArbolBinVacio(a) THEN ConstruirArbolBin(a, avacio, e, avacio) ELSE BEGIN Raiz(a, r); IF Menor(e, r) THEN Insertar(a^.Izq, e) ELSE Insertar(a^.Der, e) END; END; ED 37

Implementación PROCEDURE Eliminar(VAR a: TipoArbolBin; e: TipoElemento); { Complejidad: O(n)} VAR m, r: TipoElemento; sder, sizq: TipoArbolBin; BEGIN IF NOT EsARbolBinVacio(a) THEN BEGIN Raiz(a, r); HijoIzq(a, sizq); HijoDer(a, sder); IF IgualElem(r, e) THEN {elemento encontrado} IF EsArbolBinVacio(a^.Der) THEN BEGIN {vacía rama derecha} Dispose(a); a:= sizq; END ELSE IF EsArbolBinVacio(a^.izq) THEN {vacía rama izquierda} BEGIN ED 38

Implementación BEGIN Dispose(a); a:= sder; END ELSE BEGIN {no vacía ninguna rama} Minimo(a^.Der, m); Asignar(a^.r, m); Eliminar(a^.Der, m); END ELSE {casos recursivos: no encontrado} IF Menor(e,r) THEN Eliminar(a^.Izq, e) ELSE Eliminar(a^.Der, e) END END; a^.izq 2 a 1 6 4 5 a^.der 4 1 6 5 ED 39

Implementación (* OBSERVADORAS NO SELECTORAS *) FUNCTION Pertenece(a: TipoArbolBin; e: TipoElemento): Boolean; { Complejidad: O(n)} VAR r: TipoElemento; sizq, sder: TipoArbolBin; BEGIN IF EsArbolBinVacio(a) THEN Pertenece := FALSE ELSE BEGIN Raiz(a, r); HijoIzq(a, sizq); HijoDer(a, sder); IF IgualElem(e, r) THEN Pertenece:= TRUE; IF Menor(e,r) THEN Pertenece:= Pertenece(sIzq, e); IF Mayor(e,r) THEN Pertenece:= Pertenece(sDer, e) END; END; ED 40

Implementación PROCEDURE Minimo(a: TipoArbolBin; VAR e: TipoElemento); { Complejidad: O(n)} { Versión Iterativa} BEGIN IF NOT EsArbolBinVacio(a) THEN BEGIN (* El elemento más a la izquierda es el menor *) WHILE NOT EsArbolBinVacio(a^.izq) DO HijoIzq(a, a); Raiz(a, e); END END; ED 41

Implementación PROCEDURE Maximo(a: TipoArbolBin; VAR e: TipoElemento); { Complejidad: O(n)} { Versión recursiva } VAR sder: TipoArbolBin; BEGIN IF NOT EsArbolBinVacio(a) THEN BEGIN (* El elemento más a la derecha es el mayor *) HijoDer(a, sder); IF EsArbolBinVacio(sDer) THEN Raiz(a, e) ELSE Maximo(sDer, e); END; END; END. ED 42