ARBOLES ROJO – NEGROS. INTEGRANTES Bazan Gonzales Jose Antonio García López Carlos Omar.

Slides:



Advertisements
Presentaciones similares
5. Estructuras no lineales estáticas y dinámicas
Advertisements

ESTRUCTURA DE DATOS Unidad 04 TDA no lineales - Árboles.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
Árboles Grafo que no contiene ciclos, es decir es un grafo también acíclico, pero a su vez es conexo.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Estructuras de datos y algoritmos
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
ÁRBOLES BINARIOS DE BUSQUEDA
Operaciones sobre un árbol
Estructura de Datos en memoria secundaria
Árboles binarios. Algoritmos básicos
Tema 4 Árboles. Árbol sobre matriz.
Tema 4 Árboles. Conceptos Generales..
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Cont. Arbol Binario de Búsqueda
Árboles balanceados AVL
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
ÁRBOLES DE EXPRESION.
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.
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Tema 9 Estructuras.
Estructura de Datos Lineales
Árboles.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Estructuras de Datos MC Beatriz Beltrán Martínez.
Árboles, montículos y grafos Cola de prioridades, montículos
Tópicos I Árboles, montículos y grafos
Ordenamiento, Heapsort y Colas de prioridad
Heaps Mauro Maldonado Abril/2005. Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas,
ARBOLES ESTRUCTURAS DE DATOS.
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 B M.C. José Andrés Vázquez Flores Estructuras de Datos / Primavera 2014.
ÁRBOLES BINARIOS DE BÚSQUEDA BALANCEADOS
Árboles.

Árboles AVL cont..
Árboles Recomendado: 1. Nivelación Funciones
Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA
Árboles de Búsqueda Binaria
Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de realizar reacomodó o balanceos.
1 Arboles AVL Introducción Arboles AVL (Adel’son-Vel’skii and Landis.
Estructura de Datos M.C. José Andrés Vázquez Flores FCC/BUAP
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
Algoritmos y estructura de datos en I.O.
Á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.
Árboles Equilibrados Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2015.
Laboratorio de programación
Matemáticas Discretas MISTI
M.C. Meliza Contreras González
Listas Dinámicas.
Arboles Binarios: AVL (Adelson – Velskii - Landis)
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.
Árboles binarios. Algoritmos básicos
Á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:

ARBOLES ROJO – NEGROS

INTEGRANTES Bazan Gonzales Jose Antonio García López Carlos Omar

Los árboles Rojo – Negros es un tipo de árbol que estan balanceados de tal manera que el tiempo de realizar operaciones sea O(log n) en el peor de los casos. DEFINICION

CARACTERISTICAS Fueron inventados por R. Bayer el cuál los llamo árboles simetricos binarios. El Nodo contiene un campo extra el cuál se llama color. El árbol puede recorrerse por cualquier color, ya sea rojo o negro. Los recorridos mas largos varian a lo mas el doble del mas corto, esto quiere decir que el árbol esta practicamente balanceado.

PROPIEDADES Cada Nodo solo puede tener un solo color ya sea Rojo ó Negro. Cada apuntador de Hoja es de color negro. Si el Nodo es Rojo ambos Hijos son negros Cada camino desde cualquier Nodo hasta una Hoja contiene el mismo número de Nodos negros.

NODORB enum BOOL{ FALSO, VERDADERO}; enum COLOR{ NEGRO, ROJO}; template class NODO_ARBOL{ public: NODO_ARBOL(T x){dato = x; izquierdo = derecho = NULL; Color = NEGRO}; NODO_ARBOL *GetIzq(){return izquierdo;}; void SetIzq(NODO_ARBOL *ptr){izquierdo = ptr;}; NODO_ARBOL *GetDer(){return derecho;}; void SetDer(NODO_ARBOL *ptr){derecho = ptr;}; T GetDato(){return dato;}; COLOR GetColor(){return Color;}; void SetColor(COLOR C){ Color = C;} void SetDato(T x){ dato = x;}; private: NODO_ARBOL *izquierdo, *derecho; T dato; COLOR Color; }

ROTACION Las operaciones INSERTA y ELIMINA de un arbol Rojo-Negro modifican la estructura de este y pueden violar las propiedades de los mismos antes mencionadas, por lo cual es necesario reestablecerlas lo que implicaria cambiar el color de algunos nodos.

TIPOS DE ROTACION Rotacion Izquierda: –Cuando realizamos una Rotacion Izquierda a un nodo x, asumimos que su hijo derecho no es nulo. x y y b a y x by a

TIPOS DE ROTACION Rotacion Derecha: –Cuando realizamos una Rotacion Derecha a un nodo Y, asumimos que su hijo izquierdo no es nulo. x y y b a y x by a

CODIGO PARA ROTAR A LA IZQUIERDA void ARBOLRB ::RotarIzq(NodoRB *x){ NodoRB *y; y = x -> GetDer(); x = SetDer(Y -> GetIzq()); y -> setIzq(x); if(Padre(x) == NULL) Raiz = y; else{ if (Padre(x) -> GetIzq() == x) Padre(x) -> SetIzq(y); else Padre(x) -> SetDer(y); }

SENTINELA El sentinela es un modo auxiliar que nos ayudará para el proceso de eliminación de un nodo, al insertar un nuevo ambos hijos deberán apuntar al sentinela, el sentinela será de color negro y no guardará ningún dato, éste se declarará dentro de la clase árbol

Declaración de un sentinela //parte privada de la clase ARBOLRB private: NODORB *RAIZ, SENTINELA(-26554); // se crea con // un dato arbitrario };

INSERCIÓN Un arbol Rojo-Negro es un arbol binario, por lo tanto una inserción en este se hara de la misma forma que en un binario, pero el nodo a insertar sera siempre rojo. Posteriormente se reajustan las propiedades del mismo. Al momento dehacer la insercion, los apuntadores derecho e izquierdo del nuevo nodo son apuntados hacia el “centinela”. Existen tres casos para la inserción de un nuevo nodo.

Caso 1: El tio de x es Rojo. –Como el abuelo de x es negro, se colorea al padre y al tio de x de Negro y de Rojo al abuelo. Caso 2: El tio de x es Negro y x es hijo derecho. –Se usa una rotación a la izquierda para llevarlo al caso tres, en el que x es hijo izquierdo CASOS DE INSERCIÓN

Caso 3: El tio de x es Negro y x es hijo izquierdo. –Como x y su padreson rojos, se hace una rotacion derecha, para colorear al padrede x de negro y al abuelo de x de rojo, de modo que la nueva raiz del subarbol es el padre de x, cuyo hijo izquierdo es x e hijo derecho el abuelo de x.

INSERTA BOOL ARBOLRB ::Inserta(T x){ NodoRB *aux, *y; if(inserta2(x,Raiz)){ // dentro de este inserta se modifican los aux = Localiza(x); //apuntadores al centinela aux -> SetColor(ROJO); while(aux != Raiz && Padre(aux) -> GetColor = ROJO){ if(Padre(aux) = Padre(Padre(aux)) -> GetIzq()){ y = Padre(Padre(aux)) -> GetDer(); if(y -> GetColor() = ROJO){ Padre(aux) -> SetColor(Negro); y -> SetColor(NEGRO); Padre(Padre(aux)) -> SetColor(ROJO); aux = Padre(Padre(aux)); } else{ if(aux = Padre(aux) -> GetDer()){ aux = Padre(aux); RotarIzq(aux);

CONTINUACIÓN Padre(aux) -> SetColor(NEGRO); Padre(Padre(aux)) -> SetColor(ROJO); RotarDer(Padre(Padre(aux))); } else //lo mismo que el if pero con GetIzq y GetDer intercambiados } Raiz -> SetColor(NEGRO); return VERDADERO; } return FALSO; }

ELIMINA void NODORB ARBOLRB ::Elimina(T dato){ NODORB *z, *y, * x; z = Localiza(dato); if(z -> GetIzq() = &SENTINELA || z -> GetDer() = &SENTINELA) y =z; else y = Sucesor(z); if(y -> GetIzq() != SENTINELA) x = y -> GetIzq(); else x = y -> Getder(); if(Padre(y) = SENTINELA) RAIZ = x;

CONTINUA else{ if(EsIzq(y)) Padre(y) -> SetIzq(x); else Padre(y) -> Setder(x); } if(y != z){ // copiar los campos de y a z } if( y -> GetColor() == NEGRO) Reordena(x); }

REORDENA void ARBOLRB ::Reordena(NodoRB *ptr){ NodoRB *aux; while(ptr != Raiz && ptr -> GetColor = NEGRO){ if(ptr = Padre(ptr) -> GetIzq()){ aux = Padre(ptr) -> GetDer(); if(aux -> GetColor() = ROJO){ aux -> SetColor(NEGRO); Padre(ptr) -> SetColor(ROJO); RotarIzq(Padre(ptr)); aux = Padre(ptr) -> GetDer(); } if(aux -> GetIzq() -> GetColor() == NEGRO && aux -> GetDer() -> GetColor == NEGRO){ aux -> SetColor(ROJO); ptr = padre(ptr); }

CONTINUACION else{ if(aux -> GetDer() -> GetColor() == NEGRO){ aux -> GetIzq() -> SetColor(NEGRO); aux -> SetColor(ROJO); RotarDer(aux); aux = Padre(ptr) -> GetDer(); } aux -> SetColor(Padre(ptr) -> GetColor); Padre(ptr) -> SetColor(NEGRO); aux -> GetDer -> SetColor(NEGRO); RotarIzq(Padre(ptr)); ptr = Raiz; } else //lo mismo que el if pero con GetIzq y GetDer intercambiados } ptr -> setColor(NEGRO); }

SUCESOR El sucesor es una funcion que nos regresa el valor del dato siguiente al dato actual, pero siguiendo las reglas del recorrido en orden, es decir si existen los numeros 5, 8, 9 en el arbol, la funcion Sucesor del 5 me debera retornar un apuntador al dato siguiente en el recorrido el cual es 8.