Roberto Carlos Abreu Díaz. October 28, 2009

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

Programación de sistemas Árboles

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

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

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

Estructuras de Datos Clase 14 Árboles binarios de búsqueda

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

Outline Desbalance Árboles Red-Black Rotaciones Inserción en Arboles Red-Black. Roberto Carlos Abreu Díaz. November 5, 2009

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Programación de sistemas

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

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).

Estructura de Datos Unidad 6: ARBOLES

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

Programación II Arboles Binarios(AB)

Introducción a Árboles Árboles Binarios

Ordenamiento Avanzado: Shellshort y Quicksort

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

Tema 09: TAD Árbol binario

Programación Estructuras Arborescentes

Estructuras de Datos II

Tema 10: Árbol binario de búsqueda

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

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Tema 7: Árbol Binario

Capítulo 8. Árboles. Continuar

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

ARBOLES B. Lo que si es cierto es que la letra B no significa "binario", ya que:

4.1 Concepto de árbol.

Eliminación en un ABB

Estructuras de Datos y Algoritmos

Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid

Programación II Tema 5. Árboles binarios

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

EDA. Tema 8 Colas de Prioridad: Heaps

Árboles Carlos Delgado Kloos Mª Carmen Fernández Panadero Raquel M. Crespo García Ingeniería Telemática Univ. Carlos III de Madrid

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Cursos Propedéuticos 2015

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.

Á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.

Estructuras de Datos

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

Introducción a Árboles Árboles Binarios

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

FUNDAMENTOS DE PROGRAMACIÓN Datos recursivos II

Estructuras de datos utilizando JAVA

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

Definición recursiva de los árboles

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

Árboles B y B ) 20. Algoritmos y Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 63

Grados Ing. Inf. y Mat. Inf. Noviembre 2011 Algoritmos y Estructura de Datos Página 1 de 6

Estructura de Datos. Listas Enlazadas

Árboles Binarios Ordenados Árboles AVL

Diseño de Conjuntos y Diccionarios

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.

Estructura de Datos Árboles Árboles 2-3

Definición de árbol. Árboles

Capítulo 4: Grafos Clase 4: Árboles

Francisco J. Hernández López

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Árboles. Alonso Ramírez Manzanares Computación y Algoritmos Friday, March 17, 17

1. Leer el primer número y almacenarlo en la raíz del árbol. 2. Repetir hasta encontrar un duplicado o el árbol esté vacío.

Existen varios tipos de árboles: 5.1 Árboles binarios

Estructuras de Datos Clase 20 Árboles de búsqueda

Listas enlazadas. Programación de Sistemas

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

CAPÍTULO 2. ÁRBOLES 2.0. CONCEPTOS GENERALES

Algoritmos sobre Listas

5 Métodos de Ordenamiento. 5.1 Métodos de Ordenamiento Internos Burbuja Quicksort Heapsort Inserción Simple 5.1.

Francisco J. Hernández López

Estructuras de datos: Árboles binarios de

Introducción: una simple colección

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Estructuras de Datos. Clase 20 Árboles de búsqueda. Dr. Sergio A. Gómez.

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

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

Definiciones: conjuntos, grafos, y árboles. Agustín J. González ELO 320: Estructura de Datos y Algoritmos. 2002

Algoritmos y Programación II Curso 2006

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

Estructuras de Datos ARBOLES Y GRAFOS

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

Estructuras de Datos. 14 de junio de Apellidos

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

1. Árbol Binario de Búsqueda: Las clases Java NodoABB y ABB. 1. Definición y representación en Java 2. Operaciones y su coste estimado

Árboles balanceados (AVL) Estructura de datos

Programación de sistemas Listas enlazadas

Estructuras de datos Solemne 2

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

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

Estructuras de datos y algoritmos

Indexación y Asociación

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

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.

Segunda parte de árboles

Transcripción:

Binarios binarios Java October 28, 2009

Binarios binarios Java 1 2 Binarios 3 binarios Java Código Java para búsqueda 4 Código Java para inserción 5 Caso 1 Caso 2 Caso 3

Outline Binarios binarios Java Definición Un árbol consiste de nodos conectados entre sí por ejes.

Terminología Outline Binarios binarios Java Camino: una secuencia de pasos para llegar desde un nodo A hasta un nodo B. Raíz: es el nodo en el tope de un árbol, no tiene padre y sólo puede haber una raíz. Padre e hijo: si A y B están conectados y B está por encima de A, B es el padre de A y A es el hijo de B. Hoja: Es un nodo que no tiene hijos. Sub-árbol: Cualquier nodo puede ser considerado la raíz de un sub-árbol. Nivel: a cuántas generaciones un nodo está de la raíz. Llave: campo de data. Recorrido: visitar los nodos de un árbol en cierto orden.

Binarios binarios Java Binarios Definición Si cada nodo en un árbol puede tener a lo sumo dos hijos, el árbol es llamado árbol binario. Los dos hijos de cada nodo se llaman hijo izquierdo e hijo derecho. Los nombres corresponden a sus posiciones al dibujarlos. Nota El tipo de árbol binario con el que estaremos trabajando se llama árbol binario de búsqueda. Estos se caracterizan porque el hijo izquierdo de un nodo debe tener una llave menor que la de su padre, y el hijo derecho de un nodo debe tener una llave mayor o igual a su padre.

Binarios binarios Java Código Java para búsqueda Código Java para árboles binarios c l a s s { Node i n t data ; // l l a v e p r i v a t e Node l e f t C h i l d ; // h i j o i z q u i e r d o p r i v a t e Node r i g h t C h i l d ; // h i j o derecho c l a s s B inarytree { p r i v a t e Node r o o t ; // r a í z // y l a s o p e r a c i o n e s c o r r e s p o n d i e n t e s...

Binarios binarios Java Código Java para búsqueda Búsqueda de un elemento

Binarios binarios Java Código Java para búsqueda Búsqueda de un elemento Aprovecha el orden en que los nodos están organizados para buscar los elementos.

Binarios binarios Java Código Java para búsqueda Búsqueda de un elemento Aprovecha el orden en que los nodos están organizados para buscar los elementos. Como un nodo tiene a lo sumo un hijo izquierdo menor que él y un hijo derecho mayor que él, el algoritmo se mueve recursivamente por los sub-árboles hasta que encuentre el nodo con la llave. El dice: si estoy en un nodo y la llave no es la buscada, si la llave buscada es menor entonces visita su hijo izquierdo. De lo contrario, visita su hijo derecho.

Binarios binarios Java Código Java para búsqueda Búsqueda de un elemento Aprovecha el orden en que los nodos están organizados para buscar los elementos. Como un nodo tiene a lo sumo un hijo izquierdo menor que él y un hijo derecho mayor que él, el algoritmo se mueve recursivamente por los sub-árboles hasta que encuentre el nodo con la llave. El dice: si estoy en un nodo y la llave no es la buscada, si la llave buscada es menor entonces visita su hijo izquierdo. De lo contrario, visita su hijo derecho. Consecuentemente, si aterriza a una dirección nula, esto significa que el nodo buscado no existe en el árbol.

Binarios binarios Java Código Java para búsqueda Código Java para búsqueda p u b l i c Node f i n d ( i n t key ) { Node c u r r = r o o t ; while ( c u r r. data!= key ) { i f ( key < c u r r. data ) c u r r = c u r r. l e f t C h i l d ; e l s e c u r r = c u r r. r i g h t C h i l d ; i f ( c u r r == n u l l ) return n u l l ; return c u r r ;

Binarios binarios Java Código Java para inserción

Binarios binarios Java Código Java para inserción Para insertar un nodo, primero debemos averiguar dónde corresponde en el árbol. ( Wao!)

Binarios binarios Java Código Java para inserción Para insertar un nodo, primero debemos averiguar dónde corresponde en el árbol. ( Wao!) El código prácticamente es el mismo que el de buscar un nodo (no existente). No existente porque en ese espacio libre es que se colocará el nuevo nodo.

Binarios binarios Java Código Java para inserción Código Java para inserción p u b l i c void i n s e r t ( Node newnode ) { // Este es e l caso base, // donde e l á r b o l e s t á v a c í o i f ( r o o t == n u l l ) { r o o t = newnode ; return ; // p a r t e dos en próximo s l i d e

Binarios binarios Java Código Java para inserción Código Java para inserción Node c u r r = root, p a r e n t ; while ( true ) { p a r e n t = c u r r e n t ; i f ( newnode. data < c u r r. data ) { c u r r = c u r r. l e f t C h i l d ; i f ( c u r r == n u l l ) { p a r e n t. l e f t C h i l d = newnode ; return ; e l s e { c u r r = c u r r. r i g h t C h i l d ; i f ( c u r r == n u l l ) { p a r e n t. r i g h t C h i l d = newnode ; return ;

Binarios binarios Java Caso 1 Caso 2 Caso 3 Acerca de la eliminación Hay varios casos a considerar al eliminar un nodo. Qué hacer con los hijos de ese nodo? Se distinguen tres casos base: El nodo a eliminar es una hoja El nodo a eliminar tiene un hijo El nodo a eliminar tiene dos hijos Todos sin embargo tienen algo en común: utilizan una función de búsqueda similar a las de buscar e insertar.

Binarios binarios Java CASO 1: el nodo es hoja Caso 1 Caso 2 Caso 3 Es el caso más sencillo Simplemente se fija a null el hijo apropiado del padre de ese nodo En Java, el Garbage Collector se encarga del resto En este ejemplo, el nodo con la llave 9 es el padre. Se haría: nodopadre.rightchild = null;

Binarios binarios Java Caso 1 Caso 2 Caso 3 p u b l i c boolean d e l e t e ( i n t key ) { Node c u r r = r o o t ; Node p a r e n t = r o o t ; boolean i s L e f t = true ; while ( c u r r. data!= key ){ p a r e n t = c u r r ; i f ( key < c u r r. data ){ i s L e f t = true ; c u r r = c u r r. l e f t C h i l d ; e l s e { i s L e f t = f a l s e ; c u r r = c u r r. r i g h t C h i l d ; i f ( c u r r == n u l l ) return f a l s e ; // end w h i l e i f ( NoChild ( c u r r ) ) { i f ( c u r r == r o o t ) r o o t = n u l l ; e l s e i f ( i s L e f t ) p a r e n t. l e f t C h i l d = n u l l ; e l s e p a r e n t. r i g h t C h i l d = n u l l ;

Binarios binarios Java Caso 1 Caso 2 Caso 3 CASO 2: el nodo a eliminar tiene un hijo Este caso es relativamente sencillo también El nodo tiene a lo sumo dos conexiones: Una con su padre y una con su hijo El objetivo es reemplazar al nodo en el padre con su hijo O sea, si 9 se va a eliminar, el objetivo es fijar a 6 como el rightchild de 4

Binarios binarios Java Caso 1 Caso 2 Caso 3 // c o n t i n u a c i o n... e l s e i f ( c u r r. r i g h t C h i l d == n u l l ) { i f ( c u r r == r o o t ) r o o t = r o o t. l e f t C h i l d ; e l s e i f ( i s L e f t ) p a r e n t. l e f t C h i l d = c u r r. l e f t C h i l d ; e l s e p a r e n t. r i g h t C h i l d = c u r r. l e f t C h i l d ; e l s e i f ( c u r r. l e f t C h i l d == n u l l ) i f ( c u r r == r o o t ) r o o t = r o o t. r i g h t C h i l d ; e l s e i f ( i s L e f t ) p a r e n t. l e f t C h i l d = c u r r. r i g h t C h i l d ; e l s e p a r e n t. r i g h t C h i l d = c u r r. r i g h t C h i l d ;

Binarios binarios Java Caso 1 Caso 2 Caso 3 CASO 3: el nodo a eliminar tiene dos hijos Si tiene, no se puede reemplazar simplemente con uno de sus hijos (por lo menos cuando el hijo también tiene hijos). El objetivo es reemplazar al nodo por su sucesor. Específicamente, su sucesor En-Orden. Éste es el nodo más pequeño del conjunto de nodos que son mayores que el nodo a eliminar.

Binarios binarios Java Caso 1 Caso 2 Caso 3 p r i v a t e node g e t S u c c e s s o r ( Node node ) { Node p a r e n t = node, s u c c e s s o r = node, c u r r e n t = node. r i g h t C h i l d ; while ( c u r r e n t!= n u l l ) { p a r e n t = s u c c e s s o r ; s u c c e s s o r = c u r r e n t ; c u r r e n t = c u r r e n t e. l e f t C h i l d ; i f ( s u c c e s s o r!= node. r i g h t C h i l d ) { p a r e n t. l e f t C h i l d = s u c c e s s o r. r i g h t C h i l d ; s u c c e s s o r. r i g h t C h i l d = node. r i g h t C h i l d ; return s u c c e s s o r ;

Binarios binarios Java Caso 1 Caso 2 Caso 3 // c o n t i n u a c i o n e l s e { Node s u c c e s s o r = g e t S u c c e s s o r ( c u r r e n t ) ; i f ( c u r r == r o o t ) r o o t = s u c c e s s o r ; e l s e i f ( i s L e f t ) p a r e n t. l e f t C h i l d = s u c c e s s o r ; e l s e p a r e n t. r i g h t C h i l d = s u c c e s s o r ; s u c c e s s o r. l e f t C h i l d = c u r r. l e f t C h i l d ; return true ; // end d e l e t e