ÁRBOLES BINARIOS DE BÚSQUEDA

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

5. Estructuras no lineales estáticas y dinámicas
IBD Clase 7.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Ejemplo de Programa C++
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Programación II Listas
Estructuras de datos y algoritmos
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
Utilización de un TAD Arbol.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Programación y Estructuras de Datos
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
ÁRBOLES BINARIOS DE BUSQUEDA
Operaciones sobre un árbol
Árboles binarios. Algoritmos básicos
Tratamiento de listas en Java
Tema 4 Árboles. Árbol sobre matriz.
Tema 4 Árboles. Conceptos Generales..
ESTRUCTURAS DE DATOS AVANZADAS
Cont. Arbol Binario de Búsqueda
Árboles balanceados AVL
Programación II Colas Igor Santos Grueiro.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
ÁRBOLES DE EXPRESION.
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
Diplomado en Informática Aplicada
Estructuras dinámicas de datos, TAD Lista, parte 2
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Árboles.
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
ARBOLES ESTRUCTURAS DE DATOS.
7.  El TDA Diccionario.
Estructura de Datos y Algoritmos
Árboles binarios de búsqueda
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
ÁRBOLES BINARIOS DE BÚSQUEDA BALANCEADOS
Estructuras de Datos1 ABB´s balanceados por peso Balance perfecto Para cada nodo, el número de nodos del subárbol izquierdo y el número de nodos del subárbol.

Árboles AVL cont..
Árboles, montículos y grafos
Árboles1UVM Árboles. 2UVM Árboles3UVM 6.1 Objetivos El estudiante manejará el tad Arbol, sobre memoria dinámica.
Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA
Árboles de Búsqueda Binaria
Laboratorio Análisis y Diseño de Algoritmos 2 Biblioteca estándar de templates de C++ Standard Template Library (STL)‏ Motivación Ejemplo: Lista + Iterador.
Arboles binarios de búsqueda. Elemento estándar: Cuenta class Cuenta { public: int codigo; char nombreCliente[50]; float saldo; public: Cuenta(); Cuenta(int.
Unidad 6: Árboles.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
1 Árboles de Búsqueda Binaria Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Punteros, referencias Listas enlazadas Arboles
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
Árboles Binarios de Búsqueda (ABB)
R ECORRIDO DE ÁRBOLES BINARIOS POR AMPLITUD O POR NIVELES Elaborado por: Luis Alberto Fonseca Esquivel Eduardo Acosta Casillas.
Arboles Binarios.
A YUDANTÍA 5: A RBOLES Carlos Pulgar R. Mail: Página Ayudantía:
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Listas Dinámicas.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada HERENCIA Tema: HERENCIA Ing. Javier Chamorro Cerón.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS.
Árboles binarios. Algoritmos básicos
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
ÁRBOLES DE EXPRESION. Un árbol de expresión sirve para evaluar expresiones del tipo: (a+b)*c/d Para que un árbol represente una expresión se deben tomar.
Árboles Binarios Estructuras de Datos.
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
Transcripción de la presentación:

ÁRBOLES BINARIOS DE BÚSQUEDA

ÁRBOLES BINARIOS DE BÚSQUEDA Un Árbol Binario de Búsqueda (ABB) es un árbol binario que contiene información ordenada según una llave (valor) de búsqueda En un ABB, para todo nodo n, las llaves del subárbol izquierdo son menores que la llave del nodo n y la llave del nodo n es menor que las llaves del subárbol derecho

ÁRBOLES BINARIOS DE BÚSQUEDA Gráficamente 

ÁRBOLES BINARIOS DE BÚSQUEDA En un ABB, el recorrido Enorden genera una secuencia en orden ascendente según la llave Enorden(T1) = A, B, C, D, E, F, H T1 =

ÁRBOLES BINARIOS DE BÚSQUEDA Ejercicio: Obtener Enorden(T2) T2 =

ÁRBOLES BINARIOS DE BÚSQUEDA Representación T1 =

OPERACIONES SOBRE ABB´s Búsqueda Inserción Eliminación

BÚSQUEDA EN ABB´s Búsqueda de una llave k en un ABB T Si T  , k no existe Si T  , se compara k con la llave x al interior del nodo apuntado por T Si k  x, la búsqueda termina Si k  x, la búsqueda continúa en el subárbol izquierdo de T Si k  x, la búsqueda continúa en el subárbol derecho de T

BÚSQUEDA EN ABB´s Búsqueda de la llave 13 en el ABB T Se compara 13 con 10  buscar en Td Se compara 13 con 14  buscar en Ti Se compara 13 con 12  buscar en Td Se encontró la llave 13 T =

INSERCIÓN EN ABB´s En un ABB T, el nodo que contendrá una nueva llave k siempre se inserta como hoja T    se crea el nodo para k T    se compara k con la llave x al interior del nodo apuntado por T Si k  x, se avanza por el subárbol izquierdo de T Si k  x, se avanza por el subárbol derecho de T

INSERCIÓN EN ABB´s Insertar, en un ABB T inicialmente vacío, las llaves 10, 8, 14, 12, 9, 17, 5, 7, 11, 16, 13, 3 y 21 T =

ELIMINACIÓN EN ABB´s La eliminación de una llave k, en un ABB T, distingue tres situaciones No existe un nodo con llave k El nodo con llave k tiene, a lo más, un hijo El nodo con llave k tiene dos hijos. Luego Se reemplaza de k por m (mayor de las llaves del subárbol izquierdo ó menor de las llaves del subárbol derecho) y se elimina el nodo que la contiene

ELIMINACIÓN EN ABB´s Eliminación de una llave k contenida en un nodo hoja

ELIMINACIÓN EN ABB´s Al eliminar las llaves k = 4 y k = 6, cada una contenida en un nodo con un único hijo, T =

ELIMINACIÓN EN ABB´s Resulta el siguiente nuevo ABB T =

ELIMINACIÓN EN ABB´s Al eliminar la llave k = 8, contenida en un nodo con dos hijos, T =

ELIMINACIÓN EN ABB´s Debe ser remplazada por la mayor de las llaves del subárbol izquierdo, T =

ELIMINACIÓN EN ABB´s Ó, ser remplazada por la menor de las llaves del subárbol derecho T =

LA CLASE ABB #include <cstdlib> #include <iostream> using namespace std; typedef int Base; typedef char Clave; struct Elemento{ Clave key; Base info; }; struct Nodo { Nodo *izq; Nodo *der;

LA CLASE ABB typedef Nodo *Arbol; class Abb { private: Arbol B; Base Busca(Arbol, Clave); void Inserta(Arbol &, Elemento); Arbol Menor(Arbol &); Arbol Mayor(Arbol &); void Elimina(Arbol &, Clave); void VeAbb(Arbol);

LA CLASE ABB public: Abb(); bool Vacio(); Base Buscar(Clave); bool Existe(Clave); Clave GetKey(); Base GetInf(); Elemento GetMenor(); void Insertar(Elemento); void Eliminar(Clave); void VerAbb(); void CrearAbb(); };

LA CLASE ABB Base Abb::Busca(Arbol T, Clave k) { if (T == NULL) return -1; else if (k < T->key) return Busca(T->izq, k); if (k > T->key) return Busca(T->der, k); return T->info; }

LA CLASE ABB void Abb::Inserta(Arbol &T, Elemento e) { if (T == NULL) { T = new Nodo; T->key = e.key; T->info = e.info; T->izq = NULL; T->der = NULL; } else if (e.key < T->key) Inserta(T->izq, e); if (e.key > T->key) Inserta(T->der, e);

LA CLASE ABB Arbol Abb::Menor(Arbol &S) { if (S->izq != NULL) return Menor(S->izq); else return S; } Arbol Abb::Mayor(Arbol &S) { if (S->der != NULL) return Mayor(S->der); else { Arbol p = S; S = S->izq; return p;

LA CLASE ABB void Abb::Elimina(Arbol &T, Clave k) { Arbol q; if (T != NULL) if (k == T->key) { q = T; if (T->der == NULL) T = T->izq; else if (T->izq == NULL) T = T->der; else { q = Mayor(T->izq); T->key = q->key; T->info = q->info; }

LA CLASE ABB delete q; } else if (k < T->key) Elimina(T->izq, k); if (k > T->key) Elimina(T->der, k);

LA CLASE ABB void Abb ::VeAbb(Arbol T) { if (T != NULL) { VeAbb(T->izq); cout << "Clave: " << T->key << " Info: " << T->info << endl; VeAbb(T->der); } Abb::Abb() { B = NULL;

LA CLASE ABB bool Abb::Vacio() { return B == NULL; } bool Abb::Existe(Clave k) { return Busca(B, k) != -1; Clave Abb::GetKey() { return B->key; Base Abb::GetInf() { return B->info;

LA CLASE ABB Elemento Abb::GetMenor() { Arbol q; Elemento e; q = Menor(B); e.key = q->key; e.info = q->info; return e; }

LA CLASE ABB Base Abb::Buscar(Clave k) { return Busca(B, k); } void Abb::Insertar(Elemento e) { Inserta(B, e); void Abb::Eliminar(Clave k) { Elimina(B, k); void Abb::VerAbb() { VeAbb(B);

LA CLASE ABB void Abb::CrearAbb() { Elemento e; int i; cout << "Ingrese un entero: "; cin >> i; while(i != 0) { e.info = i; cout << "Ingrese una letra: "; cin >> e.key; Inserta(B, e); } cout << endl;

LA CLASE ABB Ejercicio Se dispone de dos Abb’s T1, T2. Implementar la función Unir(T1, T2), correspondiente a las operaciones T1 = T1T2 y T2 = . void Unir(Abb &T1, Abb &T2) { Elemento e; if(!T2.Vacio()) { e.key = T2.GetKey(); e.info = T2.GetInf(); T1.Insertar(e); T2.Eliminar(e.key); Unir(T1,T2); }