Programación II Arboles Binarios(AB)

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

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

Programación de sistemas Árboles

Programación Estructuras Arborescentes

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

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

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

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

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

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

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

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Segundo parcial de Programación 2

Programación de sistemas

Estructuras de datos Solemne 2

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

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

Estructuras de Datos ARBOLES Y GRAFOS

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

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

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

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. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

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

Tema 10: Árbol binario de búsqueda

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Arboles Binarios de Búsqueda en C++

Estructuras de Datos Clase 20 Árboles de búsqueda

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

Versión Iterativa de recuperar en un. Soluciones Ejercicios Tema 11. protected NodoABB<E> recuperarmax(nodoabb<e> n) { while (n.der!= null) n = n.

Árboles Binarios Ordenados Árboles AVL

FUNDAMENTOS DE PROGRAMACIÓN Datos recursivos II

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

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

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

Diseño de Conjuntos y Diccionarios

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

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

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

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

Tema 7: Árboles ESTRUCTURAS DE DATOS 1

Estructura de Datos Unidad 6: ARBOLES

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

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

Roberto Carlos Abreu Díaz. October 28, 2009

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

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

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º. Leonardo DaVinci. Piccasso La Tempestad. Mona Lisa

Programación II Tema 5. Árboles binarios

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

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

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

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

Estructuras de Datos. 14 de junio de Apellidos

/** * Raíz del árbol de contactos presentes en el directorio */ private. /** * Número de contactos en el directorio */ private int numcontactos;

Francisco J. Hernández López

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

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.

Examen de Programación 2 Diciembre de 2012

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

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.

EDA. Tema 8 Colas de Prioridad: Heaps

Representaciones de árboles

Introducción a Árboles Árboles Binarios

Estructuras de datos Solemne 2

Definición de árbol. Árboles

Informe Tarea II. Estructura de Datos VPT (Vintage Point Tree)

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

Tema 09: TAD Árbol binario

Francisco J. Hernández López

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

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

95.12 Algoritmos y Programación II Práctica 7: árboles

Estructuras Enlazadas AyED UTN-BA

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

Estructuras de datos utilizando JAVA

Algoritmos y Programación II 75.41

ADSW Tema 2 Diccionarios

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Capitulo VI Árboles y Grafos

Aprender los conceptos, manejo, usos y aplicación de heaps a fin de utilizarlos para el desarrollo de aplicaciones

Universidad Tecnológica de la Mixteca

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

Lista Simple con Puntero al Principio y Puntero al Final

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

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

Estructura de Datos. Índice

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.

El TAD Árbol. El TAD Árbol

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

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

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

Colas deprioridad y heaps

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

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

Un árbol A es un conjunto finito de uno o más nodos tales: ,...V n. ) se dividen en m>=0 conjuntos disjuntos denominados A 1

Programación TADs Arboles

Pilas Motivación

Transcripción:

Programación II Arboles Binarios(AB) Definición Un árbol consta de un conjunto finito de elementos, denominados nodos, y un conjunto finito de líneas dirigidas, denominadas enlaces, que conectan los nodos. Hay tres tipos de nodos: Nodo Raíz: El único nodo que no tiene padre Nodo Hoja: Los nodos que no tiene hijos Nodos Internos: Los nodos que no son hojas Intuitivamente el concepto de árbol implica una estructura en la que lo datos se organizan de modo que los elementos de información están organizados entre sí a través de ramas. En la Figura1 se pueden ver los tres tipos de nodos: Raíz: A Internos: B,C,D Hojas: E,F,G,H,I Figura1: Árbol de grado 3, con 9 nodos 1

La altura de un árbol se define como la distancia de la hoja más lejana a la raíz. La altura del árbol de la Figura1 es 3. Grado es el número máximo de hijos que tienen los nodos del árbol. Así, en el ejemplo anterior el árbol es de grado 3 Árbol binario Definición 1: Es un árbol de grado 2. Definición 2: Un Árbol binario es aquel que: es vacío, ó está formado por un nodo cuyos subárboles izquierdo y derecho son a su vez árboles binarios. El árbol de la Figura1 no es binario por ser de grado 3. El de la Figura2 es binario por ser grado 2. Figura2: Árbol binario y los primeros dos subarboles. Todo árbol de mas de un nodos tiene al menos un subarbol. En la Figura2 marcamos en verde los primeros subarboles: El subarbol izquierdo(a y B) El subarbol derecho(c,e,f,g,h) Subarboles: Por la naturaleza recursiva de los AB, todo subarbol sigue siendo árbol. La altura de un subarbol es a lo sumo la altura del árbol padre - 1. 2

Existen algunos tipos especiales de árboles binarios en función de ciertas propiedades. Por ejemplo Árbol binario balanceado es aquel en el que en todos sus nodos se cumple la siguiente propiedad:la altura(subárbol_izquierdo) - altura(subárbol_derecho) es menor o igual a 1. En la Figura 3 se muestran dos ejemplos: Figura3a: Árbol balanceado. Figura3b: Árbol desbalanceado Árbol binario completo Sea A un árbol de altura h. A es completo sii en el nivel h, A tiene todas las hojas posibles. Todo árbol binario completo (Ver Figura4) tiene 2 altura - 1 nodos Figura4: Árbol binario completo de nivel 3, con 2 3-1 nodos 3

Invariante de representación Se pueden llegar a todos los nodos desde la raíz Cada nodo tiene un solo padre No tiene ciclos Implementación de Árbol binario Un árbol solo necesita un puntero al nodo raíz. Cada nodo contiene tres valores (Ver Figura5): La información Un puntero al nodo izquierdo Un puntero al nodo derecho Figura5: Nodo public class AB<T> { private Nodo<T> raiz; //arbol binario public class Nodo<T>{ //clase interna private T info; private Nodo<T> izq; private Nodo<T> der; public Nodo(T info){ this.info = info; @Override public String tostring(){ return info.tostring(); 4

public void agregar(t elem){ Nodo<T> nuevo = new Nodo<T>(elem); if (raiz == null) raiz = nuevo; else agregar(raiz,nuevo); private void agregar(nodo<t> padre, Nodo<T> nuevo){ if (padre.izq == null) padre.izq = nuevo; else if (padre.der == null) padre.der = nuevo; else //Decisión de implementación: genera el arbol a derecha agregar(padre.der,nuevo); public Nodo<T> buscar(t elem){ return (raiz == null)? null : buscar(raiz, elem); private Nodo<T> buscar(nodo<t> nodo, T elem){ if (nodo.info.equals(elem)) return nodo; else{ Nodo<T> izq = null; Nodo<T> der = null; if (nodo.izq!= null) izq = buscar(nodo.izq, elem); if (nodo.der!= null) der = buscar(nodo.der, elem); //Decisión de implementación: si esta en ambos lado, mostramos el izquierdo primero if (izq!= null) return izq; else return der; public int cantnodos(){ return (raiz == null)? 0 : cantnodos(raiz); private int cantnodos(nodo<t> nodo){ int cantizq = (nodo.izq == null)? 0 : cantnodos(nodo.izq) ; int cantder = (nodo.der == null)? 0 : cantnodos(nodo.der) ; return 1 + cantizq + cantder; public int altura(){ return (raiz == null)? 0 : altura(raiz); private int altura(nodo<t> nodo){ int altizq = (nodo.izq == null)? 0 : altura(nodo.izq) ; int altder = (nodo.der == null)? 0 : altura(nodo.der) ; return 1 + Math.max(altIzq, altder); 5

Casos base en árboles: dos enfoques //version1: public boolean balanceado(){ return (raiz == null)? true : balanceado(raiz); private boolean balanceado(nodo<t> nodo){ boolean ret= true; int altizq = 0 ; int altder = 0 ; if (nodo.izq!= null){ altizq =altura(nodo.izq); ret = ret && balanceado(nodo.izq); if (nodo.der!= null){ altder =altura(nodo.der); ret = ret && balanceado(nodo.der); ret=ret && Math.abs(altIzq - altder) <= 1 ; return ret; version2: a veces conviene hacer el caso base sobre el nodo public boolean balanceado(){ return balanceado(raiz); private boolean balanceado(nodo<t> nodo){ if (nodo == null) return true; else{ int altizq = (nodo.izq == null)? 0 : altura(nodo.izq) ; int altder = (nodo.der == null)? 0 : altura(nodo.der) ; return Math.abs(altIzq - altder) <= 1 && balanceado(nodo.izq) && balanceado(nodo.der) ; @Override public String tostring(){ return (raiz == null)? "" : tostring(raiz); private String tostring(nodo<t> nodo){ String ret = nodo.info.tostring(); if (nodo.izq!= null) ret = ret + tostring(nodo.izq); if (nodo.der!= null) ret = ret + tostring(nodo.der); return ret; 6

Ejercicio1: Cual será el orden de complejidad de insertar un nodo para el peor caso sí: a) El árbol no está completo b) El árbol está completo Ejercicio2: Cual será el orden de complejidad de buscar un nodo para el peor caso sí: a) El árbol no está completo b) El árbol está completo 7