Sunteți pe pagina 1din 14

RBOLES GENERALES Y BINARIOS Y ESTRUCTURAS DE NDICES

DEFINICIONES Y REPRESENTACIONES. NOMENCLATURA SOBRE RBOLES. DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO. RECORRIDOS SOBRE RBOLES BINARIOS. CONSTRUCCIN DE UN RBOL BINARIO. RBOL BINARIO DE BSQUEDA. RBOLES 2-3-4. RBOLES ROJO NEGRO. RBOLES AVL. RBOLES MULTIWAY. RBOLES B. RBOLES B+. RBOLES BINARIOS HILVANADOS.
RBOLES GENERALES Y BINARIOS 1

DEFINICIONES Y REPRESENTACIONES

RBOLES GENERALES Y BINARIOS

DEFINICIONES Y REPRESENTACIONES
UN BOSQUE ES UN GRAFO NO DIRIGIDO ACCLICO. UN RBOL ES UNA ESTRUCTURA DE DATOS, QUE PUEDE DEFINIRSE DE FORMA RECURSIVA COMO: UNA ESTRUCTURA VACA O. UN ELEMENTO O CLAVE DE INFORMACIN (NODO) MS UN NMERO FINITO DE ESTRUCTURAS TIPO RBOL, DISJUNTOS, LLAMADOS SUBRBOLES: SI DICHO NMERO DE ESTRUCTURAS ES INFERIOR O IGUAL A 2, SE TIENE UN RBOL BINARIO. UN RBOL ES UNA ESTRUCTURA NO SECUENCIAL. UN RBOL ES UN TIPO DE GRAFO ACCLICO, CONEXO Y NO DIRIGIDO: ES UN GRAFO NO DIRIGIDO EN EL QUE EXISTE EXACTAMENTE UN CAMINO ENTRE TODO PAR DE NODOS. ESTA DEFINICIN PERMITE IMPLEMENTAR UN RBOL Y SUS OPERACIONES EMPLEANDO LAS REPRESENTACIONES QUE SE UTILIZAN PARA LOS GRAFOS.
RBOLES GENERALES Y BINARIOS 3

DEFINICIONES Y REPRESENTACIONES
LAS PRINCIPALES FORMAS DE REPRESENTACIN SON: MEDIANTE UN GRAFO. MEDIANTE UN DIAGRAMA ENCOLUMNADO: a b d c e f UNA ESTRUCTURA DE DATOS MUY UTILIZADA SON LOS RBOLES BINARIOS: ESTOS RBOLES TIENEN 0, 1 O 2 DESCENDIENTES COMO MXIMO. EL RBOL DE LA FIGURA ES UN EJEMPLO VLIDO DE RBOL BINARIO.

RBOLES GENERALES Y BINARIOS

DEFINICIONES Y REPRESENTACIONES

NOMENCLATURA SOBRE RBOLES

RBOLES GENERALES Y BINARIOS

RBOLES GENERALES Y BINARIOS

NOMENCLATURA SOBRE RBOLES


RAZ: ES AQUEL ELEMENTO QUE NO TIENE ANTECESOR; EJEMPLO: a. RAMA: ES LA ARISTA ENTRE DOS NODOS. ANTECESOR: UN NODO X ES ANTECESOR DE UN NODO Y SI POR ALGUNA DE LAS RAMAS DE X SE PUEDE LLEGAR A Y. SUCESOR: UN NODO X ES SUCESOR DE UN NODO Y SI POR ALGUNA DE LAS RAMAS DE Y SE PUEDE LLEGAR A X. GRADO DE UN NODO: ES EL NMERO DE DESCENDIENTES DIRECTOS QUE TIENE. EJEMPLO: c TIENE GRADO 2, d TIENE GRADO 0, a TIENE GRADO 2. HOJA: ES UN NODO QUE NO TIENE DESCENDIENTES (GRADO 0). EJEMPLO: d. NODO INTERNO: ES AQUEL QUE TIENE AL MENOS UN DESCENDIENTE.

NOMENCLATURA SOBRE RBOLES


NIVEL: ES EL NMERO DE RAMAS QUE HAY QUE RECORRER PARA LLEGAR DE LA RAZ A UN NODO. EJEMPLO: EL NIVEL DEL NODO a ES 1 (ES UN CONVENIO), EL NIVEL DEL NODO e ES 3. ALTURA: ES EL NIVEL MS ALTO DEL RBOL. EN EL EJEMPLO LA ALTURA ES 3. ANCHURA: ES EL MAYOR VALOR DEL NMERO DE NODOS QUE HAY EN UN NIVEL. EN LA FIGURA LA ANCHURA ES 3. RBOL BALANCEADO POR ALTURA: ES AQUEL EN DONDE TODOS LOS HIJOS O NODOS HOJA SE INTENTAN MANTENER A LA MISMA DISTANCIA DE LA RAZ. RBOL BALANCEADO POR PESO: ES AQUEL EN DONDE LOS NODOS MS VISITADOS O UTILIZADOS SE MANTIENEN A POCA DISTANCIA DE LA RAZ. RBOL RELLENO: SE DA CUANDO TODO NODO TIENE 2 HIJOS O BIEN ES HOJA. RBOL BINARIO COMPLETO: ES UN RBOL BINARIO RELLENO EN DNDE TODAS LAS HOJAS TIENEN LA MISMA PROFUNDIDAD.
RBOLES GENERALES Y BINARIOS 8

RBOLES GENERALES Y BINARIOS

NOMENCLATURA SOBRE RBOLES


ACLARACIONES: SE HA DENOMINADO a A LA RAZ, PERO SE PUEDE OBSERVAR SEGN LA FIGURA QUE CUALQUIER NODO PODRA SER CONSIDERADO RAZ, BASTA CON GIRAR EL RBOL. PODRA DETERMINARSE POR EJEMPLO QUE b FUERA LA RAZ Y a Y d LOS SUCESORES INMEDIATOS DE LA RAZ b. GENERALMENTE EN LAS IMPLEMENTACIONES SOBRE UN COMPUTADOR ES NECESARIA UNA JERARQUA, ES DECIR, QUE HAYA UNA NICA RAZ.

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO

RBOLES GENERALES Y BINARIOS

RBOLES GENERALES Y BINARIOS

10

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


SE DEFINIR EL RBOL CON UNA CLAVE DE TIPO ENTERO (PUEDE SER CUALQUIER OTRO TIPO DE DATOS), Y DOS HIJOS: IZQUIERDO (izq) Y DERECHO (der). PARA REPRESENTAR LOS ENLACES CON LOS HIJOS SE UTILIZAN PUNTEROS. EL RBOL VACO SE REPRESENTAR CON UN PUNTERO NULO.

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


EN C UN RBOL BINARIO PUEDE DECLARARSE DE LA SIGUIENTE MANERA: typedef struct tarbol { int clave; struct tarbol *izq, *der; } tarbol;

RBOLES GENERALES Y BINARIOS

11

RBOLES GENERALES Y BINARIOS

12

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


UNA FORMA MS DETALLADA SERA: ESTRUCTURA TreeNode: template<class T> class TreeNode { public: TreeNode(T e) : data(e), leftPtr(NULL), rightPtr(NULL) {}; TreeNode(T e, TreeNode<T>* left, TreeNode<T>* right) : data(e), leftPtr(left), rightPtr(right) {}; T data; TreeNode<T> *leftPtr, *rightPtr; };
RBOLES GENERALES Y BINARIOS 13

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


ESTRUCTURA BinaryTree: template<class T> class BinaryTree { public: BinaryTree(): root(NULL) {}; BinaryTree(T rootValue); BinaryTree(T rootValue, const BinaryTree<T>& left, const BinaryTree<T>& right); BinaryTree<T>& operator= (const BinaryTree<T>& b); ~BinaryTree(){ Clear();};

RBOLES GENERALES Y BINARIOS

14

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


BinaryTree<T> Left() const; BinaryTree<T> Right() const; int IsEmpty() const { return (root == NULL);}; T& operator() () const; void Clear(); void Preorder(); void Inorder(); void Postorder(); protected: TreeNode<T>* root; };

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO


LA REPRESENTACIN GRFICA ES LA SIGUIENTE:

data *leftPtr *rightPtr

RBOLES GENERALES Y BINARIOS

15

RBOLES GENERALES Y BINARIOS

16

DECLARACIN Y REPRESENTACIN DE UN RBOL BINARIO

RECORRIDOS SOBRE RBOLES BINARIOS

RBOLES GENERALES Y BINARIOS

17

RBOLES GENERALES Y BINARIOS

18

RECORRIDOS SOBRE RBOLES BINARIOS


SE CONSIDERAN DOS TIPOS DE RECORRIDO: RECORRIDO EN PROFUNDIDAD. RECORRIDO EN ANCHURA O A NIVEL. PUESTO QUE LOS RBOLES NO SON SECUENCIALES COMO LAS LISTAS, HAY QUE BUSCAR ESTRATEGIAS ALTERNATIVAS PARA VISITAR TODOS LOS NODOS.

RECORRIDOS SOBRE RBOLES BINARIOS


RECORRIDOS EN PROFUNDIDAD RECORRIDO EN PREORDEN (PREORDER): CONSISTE EN VISITAR EL NODO ACTUAL (VISITAR PUEDE SER SIMPLEMENTE MOSTRAR LA CLAVE DEL NODO POR PANTALLA), Y DESPUS VISITAR EL SUBRBOL IZQUIERDO Y UNA VEZ VISITADO, VISITAR EL SUBRBOL DERECHO. ES UN PROCESO RECURSIVO POR NATURALEZA. PARA LA FIGURA EJEMPLO LAS VISITAS SERAN EN EL ORDEN SIGUIENTE: a,b,d,c,e,f.

RBOLES GENERALES Y BINARIOS

19

RBOLES GENERALES Y BINARIOS

20

RECORRIDOS SOBRE RBOLES BINARIOS


LA CODIFICACIN EN C ES LA SIGUIENTE: void preorden(tarbol *a) { if (a != NULL) { visitar(a); preorden(a->izq); preorden(a->der); } }

RECORRIDOS SOBRE RBOLES BINARIOS


RECORRIDO EN INORDEN U ORDEN CENTRAL (INORDER): SE VISITA EL SUBRBOL IZQUIERDO, EL NODO ACTUAL, Y DESPUS SE VISITA EL SUBRBOL DERECHO. EN EL EJEMPLO DE LA FIGURA LAS VISITAS SERAN EN ESTE ORDEN: b,d,a,e,c,f. LA CODIFICACIN EN C ES LA SIGUIENTE: void inorden(tarbol *a) { if (a != NULL) { inorden(a->izq); visitar(a); inorden(a->der); } }

RBOLES GENERALES Y BINARIOS

21

RBOLES GENERALES Y BINARIOS

22

RECORRIDOS SOBRE RBOLES BINARIOS


RECORRIDO EN POSTORDEN (POSTORDER): SE VISITAN PRIMERO EL SUBRBOL IZQUIERDO, DESPUS EL SUBRBOL DERECHO, Y POR LTIMO EL NODO ACTUAL. EN EL EJEMPLO DE LA FIGURA EL RECORRIDO QUEDARA AS: d,b,e,f,c,a. LA CODIFICACIN EN C ES LA SIGUIENTE: void postorden(arbol *a) { if (a != NULL) { postorden(a->izq); postorden(a->der); visitar(a); } }

RECORRIDOS SOBRE RBOLES BINARIOS


LA VENTAJA DEL RECORRIDO EN POSTORDEN ES QUE PERMITE BORRAR EL RBOL DE FORMA CONSISTENTE: SI VISITAR SE TRADUCE POR BORRAR EL NODO ACTUAL, AL EJECUTAR ESTE RECORRIDO SE BORRAR EL RBOL O SUBRBOL QUE SE PASA COMO PARMETRO. LA RAZN PARA HACER ESTO ES QUE NO SE DEBE BORRAR UN NODO Y DESPUS SUS SUBRBOLES, PORQUE AL BORRARLO SE PUEDEN PERDER LOS ENLACES, Y AUNQUE NO SE PERDIERAN SE ROMPE CON LA REGLA DE MANIPULAR UNA ESTRUCTURA DE DATOS INEXISTENTE.

RBOLES GENERALES Y BINARIOS

23

RBOLES GENERALES Y BINARIOS

24

RECORRIDOS SOBRE RBOLES BINARIOS


EJEMPLOS DE RECORRIDOS DE RBOLES BINARIOS:

RECORRIDOS SOBRE RBOLES BINARIOS


RBOL

PARA EJEMPLO DE RECORRIDOS EN AMPLITUD:

RBOLES GENERALES Y BINARIOS

25

RBOLES GENERALES Y BINARIOS

26

RECORRIDOS SOBRE RBOLES BINARIOS


RECORRIDOS EN AMPLITUD CONSISTE EN IR VISITANDO EL RBOL POR NIVELES. PRIMERO SE VISITAN LOS NODOS DE NIVEL 1 (LA RAZ), DESPUS LOS NODOS DE NIVEL 2, AS HASTA QUE YA NO QUEDEN MS. SI SE HACE EL RECORRIDO EN AMPLITUD DEL RBOL DE LA FIGURA EJEMPLO SE VISITARAN LOS NODOS EN ESTE ORDEN: a,b,c,d,e,f. EN ESTE CASO EL RECORRIDO NO SE REALIZAR DE FORMA RECURSIVA SINO ITERATIVA, UTILIZANDO UNA COLA COMO ESTRUCTURA DE DATOS AUXILIAR: EL PROCEDIMIENTO CONSISTE EN ENCOLAR (SI NO ESTN VACOS) LOS SUBRBOLES IZQUIERDO Y DERECHO DEL NODO EXTRAIDO DE LA COLA, Y SEGUIR DESENCOLANDO Y ENCOLANDO HASTA QUE LA COLA EST VACA. EN LA CODIFICACIN QUE VIENE A CONTINUACIN NO SE IMPLEMENTAN LAS OPERACIONES SOBRE COLAS.
RBOLES GENERALES Y BINARIOS 27

RECORRIDOS SOBRE RBOLES BINARIOS


LA CODIFICACIN EN C ES LA SIGUIENTE: void amplitud(tarbol *a) { tCola cola; /* LAS CLAVES DE LA COLA SERN DE TIPO RBOL BINARIO */ arbol *aux; if (a != NULL) { CrearCola(cola); encolar(cola, a); while (!colavacia(cola)) { desencolar(cola, aux); visitar(aux); if (aux->izq != NULL) encolar(cola, aux->izq); if (aux->der != NULL) encolar(cola, aux->der); } } } RBOLES GENERALES Y BINARIOS 28

CONSTRUCCIN DE UN RBOL BINARIO

CONSTRUCCIN DE UN RBOL BINARIO


A CONTINUACIN SE ESTUDIA UN MTODO PARA CREAR UN RBOL BINARIO QUE NO TENGA CLAVES REPETIDAS. SE PARTE DE SU RECORRIDO EN PREORDEN E INORDEN, ALMACENADOS EN SENDOS ARRAYS.

RBOLES GENERALES Y BINARIOS

29

RBOLES GENERALES Y BINARIOS

30

CONSTRUCCIN DE UN RBOL BINARIO

CONSTRUCCIN DE UN RBOL BINARIO


A CONTINUACIN COMIENZA UN PROCESO RECURSIVO. SE PROCEDE A CREAR EL SUBRBOL IZQUIERDO, CUYO TAMAO EST LIMITADO POR LOS NDICES IZQ Y DER. LA SIGUIENTE POSICIN EN EL RECORRIDO EN PREORDEN ES LA RAZ DE ESTE SUBRBOL. QUEDA LO SIGUIENTE:

PARTIENDO DE LOS RECORRIDOS PREORDEN E INORDEN DEL RBOL DE LA FIGURA EJEMPLO PUEDE DETERMINARSE: QUE LA RAZ ES EL PRIMER ELEMENTO DEL RECORRIDO EN PREORDEN. ESE ELEMENTO SE BUSCA EN EL ARRAY INORDEN. LOS ELEMENTOS EN EL ARRAY INORDEN ENTRE IZQ Y LA RAZ FORMAN EL SUBRBOL IZQUIERDO. LOS ELEMENTOS ENTRE DER Y LA RAZ FORMAN EL SUBRBOL DERECHO. POR TANTO SE TIENE EL RBOL SIGUIENTE:

RBOLES GENERALES Y BINARIOS

31

RBOLES GENERALES Y BINARIOS

32

CONSTRUCCIN DE UN RBOL BINARIO


EL SUBRBOL b TIENE UN SUBRBOL DERECHO, QUE NO TIENE NINGN DESCENDIENTE, SEGN INDICAN LOS NDICES IZQ Y DER. SE HA OBTENIDO EL SUBRBOL IZQUIERDO COMPLETO DE LA RAZ a, PUESTO QUE b NO TIENE SUBRBOL IZQUIERDO:

RBOL BINARIO DE BSQUEDA

DESPUS SEGUIR CONSTRUYNDOSE EL SUBRBOL DERECHO A PARTIR DE LA RAZ a.

RBOLES GENERALES Y BINARIOS

33

RBOLES GENERALES Y BINARIOS

34

RBOL BINARIO DE BSQUEDA


UN RBOL BINARIO DE BSQUEDA ES AQUEL QUE ES: UNA ESTRUCTURA VACA, O. UN ELEMENTO O CLAVE DE INFORMACIN (NODO) MS UN NMERO FINITO -A LO SUMO DOS- DE ESTRUCTURAS TIPO RBOL, DISJUNTOS, LLAMADOS SUBRBOLES QUE CUMPLEN LO SIGUIENTE: TODAS LAS CLAVES DEL SUBRBOL IZQUIERDO AL NODO SON MENORES QUE LA CLAVE DEL NODO. TODAS LAS CLAVES DEL SUBRBOL DERECHO AL NODO SON MAYORES QUE LA CLAVE DEL NODO. AMBOS SUBRBOLES SON RBOLES BINARIOS DE BSQUEDA.

RBOL BINARIO DE BSQUEDA


UN EJEMPLO DE RBOL BINARIO DE BSQUEDA ES EL SIGUIENTE:

RBOLES GENERALES Y BINARIOS

35

RBOLES GENERALES Y BINARIOS

36

RBOL BINARIO DE BSQUEDA


AL DEFINIR EL TIPO DE DATOS QUE REPRESENTA LA CLAVE DE UN NODO DENTRO DE UN RBOL BINARIO DE BSQUEDA ES NECESARIO QUE EN DICHO TIPO SE PUEDA ESTABLECER UNA RELACIN DE ORDEN. POR EJEMPLO, SUPONER QUE EL TIPO DE DATOS DE LA CLAVE ES UN PUNTERO (DA IGUAL A LO QUE APUNTE). EN EL EJEMPLO DE LA FIGURA LAS CLAVES SON NMEROS ENTEROS: DADA LA RAZ 4, LAS CLAVES DEL SUBRBOL IZQUIERDO SON MENORES QUE 4, Y LAS CLAVES DEL SUBRBOL DERECHO SON MAYORES QUE 4. ESTO SE CUMPLE TAMBIN PARA TODOS LOS SUBRBOLES. SI SE HACE EL RECORRIDO DE ESTE RBOL EN ORDEN CENTRAL SE OBTIENE UNA LISTA DE LOS NMEROS ORDENADA DE MENOR A MAYOR.

RBOL BINARIO DE BSQUEDA


UNA VENTAJA FUNDAMENTAL ES QUE SON EN GENERAL MUCHO MS RPIDOS PARA LOCALIZAR UN ELEMENTO QUE UNA LISTA ENLAZADA. SON MS RPIDOS PARA INSERTAR Y BORRAR ELEMENTOS. SI EL RBOL EST PERFECTAMENTE EQUILIBRADO (LA DIFERENCIA ENTRE EL N DE NODOS DEL SUBRBOL IZQUIERDO Y EL N DE NODOS DEL SUBRBOL DERECHO ES A LO SUMO 1, PARA TODOS LOS NODOS): EL NMERO DE COMPARACIONES NECESARIAS PARA LOCALIZAR UNA CLAVE ES APROXIMADAMENTE LOG N EN EL PEOR CASO. EL ALGORITMO DE INSERCIN EN UN RBOL BINARIO DE BSQUEDA TIENE LA VENTAJA (SOBRE LOS ARRAYS ORDENADOS, DONDE SE EMPLEARA BSQUEDA DICOTMICA PARA LOCALIZAR UN ELEMENTO) DE QUE NO NECESITA HACER UNA REUBICACIN DE LOS ELEMENTOS DE LA ESTRUCTURA PARA QUE ESTA SIGA ORDENADA DESPUS DE LA INSERCIN.

RBOLES GENERALES Y BINARIOS

37

RBOLES GENERALES Y BINARIOS

38

RBOL BINARIO DE BSQUEDA


DICHO ALGORITMO FUNCIONA AVANZANDO POR EL RBOL ESCOGIENDO LA RAMA IZQUIERDA O DERECHA EN FUNCIN DE LA CLAVE QUE SE INSERTA Y LA CLAVE DEL NODO ACTUAL, HASTA ENCONTRAR SU UBICACIN: INSERTAR LA CLAVE 7 EN EL RBOL DE LA FIGURA REQUIERE AVANZAR POR EL RBOL HASTA LLEGAR A LA CLAVE 8, E INTRODUCIR LA NUEVA CLAVE EN EL SUBRBOL IZQUIERDO A 8. EL ALGORITMO DE BORRADO EN RBOLES ES ALGO MS COMPLEJO, PERO MS EFICIENTE QUE EL DE BORRADO EN UN ARRAY ORDENADO.

RBOL BINARIO DE BSQUEDA


OPERACIONES BSICAS SOBRE RBOLES BINARIOS DE BSQUEDA BSQUEDA SI EL RBOL NO ES DE BSQUEDA, ES NECESARIO EMPLEAR UNO DE LOS RECORRIDOS ANTERIORES SOBRE EL RBOL PARA LOCALIZARLO. EL RESULTADO ES IDNTICO AL DE UNA BSQUEDA SECUENCIAL. APROVECHANDO LAS PROPIEDADES DEL RBOL DE BSQUEDA SE PUEDE ACELERAR LA LOCALIZACIN: HAY QUE DESCENDER A LO LARGO DEL RBOL A IZQUIERDA O DERECHA DEPENDIENDO DEL ELEMENTO QUE SE BUSCA. LA CODIFICACIN EN C ES LA SIGUIENTE: boolean buscar(tarbol *a, int elem) { if (a == NULL) return FALSE; else if (a->clave < elem) return buscar(a->der, elem); else if (a->clave > elem) return buscar(a->izq, elem); else return TRUE; } Y BINARIOS RBOLES GENERALES 40

RBOLES GENERALES Y BINARIOS

39

RBOL BINARIO DE BSQUEDA


INSERCIN LA INSERCIN RESULTA PRCTICAMENTE IDNTICA A LA BSQUEDA. CUANDO SE LLEGA A UN RBOL VACO SE CREA EL NODO EN EL PUNTERO QUE SE PASA COMO PARMETRO POR REFERENCIA, DE ESTA MANERA LOS NUEVOS ENLACES MANTIENEN LA COHERENCIA. SI EL ELEMENTO A INSERTAR YA EXISTE ENTONCES NO SE HACE NADA.

RBOL BINARIO DE BSQUEDA


LA CODIFICACIN EN C ES LA SIGUIENTE: void insertar(tarbol **a, int elem) { if (*a == NULL) { *a = (arbol *) malloc(sizeof(arbol)); (*a)->clave = elem; (*a)->izq = (*a)->der = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->der, elem); else if ((*a)->clave > elem) insertar(&(*a)->izq, elem); }

RBOLES GENERALES Y BINARIOS

41

RBOLES GENERALES Y BINARIOS

42

RBOL BINARIO DE BSQUEDA


BORRADO LA OPERACIN DE BORRADO RESULTA SER ALGO MS COMPLICADA. EL RBOL DEBE SEGUIR SIENDO DE BSQUEDA TRAS EL BORRADO. UNA VEZ ENCONTRADO EL NODO A BORRAR PUEDEN DARSE TRES CASOS: EL NODO NO TIENE DESCENDIENTES: SIMPLEMENTE SE BORRA. EL NODO TIENE AL MENOS UN DESCENDIENTE POR UNA SOLA RAMA: SE BORRA DICHO NODO Y SU PRIMER DESCENDIENTE SE ASIGNA COMO HIJO DEL PADRE DEL NODO BORRADO: EN EL RBOL DE LA FIGURA SE BORRA EL NODO CUYA CLAVE ES 1, RESULTANDO EL SIGUIENTE RBOL:

RBOL BINARIO DE BSQUEDA


EL NODO TIENE AL MENOS UN DESCENDIENTE POR CADA RAMA: AL BORRAR DICHO NODO ES NECESARIO MANTENER LA COHERENCIA DE LOS ENLACES Y LA ESTRUCTURA DE UN RBOL BINARIO DE BSQUEDA: LA SOLUCIN CONSISTE EN SUSTITUIR LA INFORMACIN DEL NODO QUE SE BORRA POR LA DE UNA DE LAS HOJAS Y BORRAR A CONTINUACIN DICHA HOJA: DEBE SER LA HOJA QUE CONTENGA UNA DE ESTAS DOS CLAVES: LA MAYOR DE LAS CLAVES MENORES AL NODO QUE SE BORRA: SI SE QUIERE BORRAR EL NODO 4 DEL RBOL DE LA FIGURA EJEMPLO SE SUSTITUIR LA CLAVE 4 POR LA CLAVE 2. LA MENOR DE LAS CLAVES MAYORES AL NODO QUE SE BORRA: SI SE QUIERE BORRAR EL NODO 4 DEL RBOL DE LA FIGURA EJEMPLO SE SUSTITUIR LA CLAVE 4 POR LA CLAVE 5.
RBOLES GENERALES Y BINARIOS 44

RBOLES GENERALES Y BINARIOS

43

RBOL BINARIO DE BSQUEDA


EL ALGORITMO DE BORRADO QUE SE MUESTRA A CONTINUACIN REALIZA LA SUSTITUCIN POR LA MAYOR DE LAS CLAVES MENORES, PARA LO CUAL ES NECESARIO: DESCENDER PRIMERO A LA IZQUIERDA DEL NODO QUE SE VA A BORRAR. AVANZAR SIEMPRE A LA DERECHA HASTA ENCONTRAR UN NODO HOJA. A CONTINUACIN SE MUESTRA GRFICAMENTE EL PROCESO DE BORRAR EL NODO DE CLAVE 4:

RBOL BINARIO DE BSQUEDA

RBOLES GENERALES Y BINARIOS

45

LA CODIFICACIN EN C ES LA SIGUIENTE, DONDE EL PROCEDIMIENTO SUSTITUIR ES EL QUE DESCIENDE POR EL RBOL CUANDO SE DA EL CASO DEL NODO CON DESCENCIENTES POR AMBAS RAMAS: void borrar(tarbol **a, int elem) { void sustituir(tarbol **a, tarbol **aux); tarbol *aux; if (*a == NULL) /* no existe la clave */ return; if ((*a)->clave < elem) borrar(&(*a)->der, elem); else if ((*a)->clave > elem) borrar(&(*a)->izq, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->izq == NULL) *a = (*a)->der; else if ((*a)->der == NULL) *a = (*a)->izq; else sustituir(&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */ free(aux); } RBOLES GENERALES Y BINARIOS 46

RBOL BINARIO DE BSQUEDA


} void sustituir(tarbol **a, tarbol **aux) { if ((*a)->der != NULL) sustituir(&(*a)->der, aux); else { (*aux)->clave = (*a)->clave; *aux = *a; *a = (*a)->izq; } }

RBOLES 2-3-4

RBOLES GENERALES Y BINARIOS

47

RBOLES GENERALES Y BINARIOS

48

RBOLES 2-3-4
COMO UNA FORMA DE ELIMINAR LAS BSQUEDAS EXHAUSTIVAS DE LOS RBOLES BINARIOS EXISTEN LOS RBOLES 2-3-4. ESTOS SON RBOLES EN CUYOS NODOS SE PERMITE TENER MS DE UNA CLAVE AL MISMO TIEMPO. LOS RBOLES BINARIOS TIENEN MXIMO 2 HIJOS (DERECHO E IZQUIERDO). SI SE LE PERMITE AL NODO TENER 2 VALORES, ESTE PODR TENER 3 LIGAS A SUBRBOLES Y UNO CON 3 VALORES PODR TENER 4 LIGAS. UN RBOL CON ESTAS CARACTERSTICAS PUEDE CONTENER ENTONCES NODOS CON 2, 3 O 4 LIGAS, DE AH QUE SE LES LLAMA RBOLES 2-3-4. EN LOS RBOLES 2-3-4 TODOS LOS SUBRBOLES TIENEN LA MISMA ALTURA Y ESTN SIEMPRE BALANCEADOS. ESTOS RBOLES SON MUY ATRACTIVOS PARA EL ALMACENAMIENTO Y RECUPERACIN DE CLAVES, SIN EMBARGO SON UN TANTO COMPLICADOS DE IMPLEMENTAR.

RBOLES 2-3-4
LOS RBOLES 2-3 SON UN TIPO DE RBOL BALANCEADO POR ALTURA (HEIGHT BALANCED) EN DONDE TODOS LOS NODOS NOTERMINALES TIENEN 2 3 DECENDIENTES Y TODOS LOS NODOS HOJA TIENEN LA MISMA LONGITUD (PATH LENGTH) O DISTANCIA DESDE LA RAZ. EN ESTOS RBOLES SLO LAS HOJAS CONTIENEN LA INFORMACIN (VALORES). LOS NODOS NO-TERMINAMES CONTIENEN INDICADORES QUE CONSTAN DE 2 VALORES DE LOS CUALES EL IZQUIERDO ES EL MXIMO DEL SUBRBOL IZQUIERDO Y EL SEGUNDO VALOR ES EL VALOR MXIMO DEL SUBRBOL CENTRAL.

RBOLES GENERALES Y BINARIOS

49

RBOLES GENERALES Y BINARIOS

50

RBOLES 2-3-4
RBOL 2-3-4

RBOLES ROJO - NEGRO

RBOLES GENERALES Y BINARIOS

51

RBOLES GENERALES Y BINARIOS

52

RBOLES ROJO - NEGRO


LOS RBOLES ROJO-NEGRO SON RBOLES BINARIOS EN DONDE CADA NODO TIENE UN COLOR YA SEA ROJO O NEGRO. ESTOS RBOLES REPRESENTAN UNA MANERA DE TRANSFORMAR UN RBOL 2-3-4 EN UNO BINARIO, LO QUE SE PUEDE LOGRAR UTILIZANDO LOS SIGUIENTES LINEAMIENTOS: TODO NODO 2 ES TRANSFORMADO A UN NODO NEGRO CON DECENDIENTES NEGROS. TODO NODO 3 ES TRANSFORMADO EN UN NODO NEGRO CON UN HIJO ROJO Y UNO NEGRO. UN NODO 4 ES TRANSFORMADO A UN NODO NEGRO CON DOS HIJOS ROJOS.

RBOLES ROJO - NEGRO


ESTO SATISFACE LAS SIGUIENTES PROPIEDADES: TODOS LOS NODOS TIENEN UN COLOR, YA SEA ROJO O NEGRO. TODA HOJA ES NEGRA. AMBOS DESCENDIENTES DE UN NODO ROJO SON SIEMPRE NODOS NEGROS. CADA CAMINO DESDE CUALQUIER NODO HASTA UNA HOJA DESCENDIENTE CONTIENE EL MISMO NMERO DE NODOS NEGROS. NO HAY DOS NODOS ROJOS ADYACENTES EN UN CAMINO.

RBOLES GENERALES Y BINARIOS

53

RBOLES GENERALES Y BINARIOS

54

RBOLES ROJO - NEGRO


UN EJEMPLO DE TRANSFORMACIN DE LOS NODOS '3' Y '4' EN ROJO NEGRO ES EL SIGUIENTE:

RBOLES ROJO - NEGRO


AL NMERO DE NODOS NEGROS EN EL CAMINO DE UN NODO A UNA HOJA DESCENDIENTE SE LE CONOCE COMO LA ALTURA NEGRA DEL NODO. LA ALTURA - NEGRA DE UN RBOL ROJO - NEGRO ES LA ALTURA NEGRA DE SU RAZ. EJEMPLO DE TRANSFORMACIN DE UN RBOL 2-3-4 EN UN RBOL ROJO NEGRO:

RBOLES GENERALES Y BINARIOS

55

RBOLES GENERALES Y BINARIOS

56

RBOLES AVL

RBOLES AVL
LA ESTRUCTURA DE DATOS MS VIEJA Y MEJOR CONOCIDA PARA RBOLES BALANCEADOS ES EL RBOL AVL. SU PROPIEDAD ES QUE LA ALTURA DE LOS SUBRBOLES DE CADA NODO DIFIERE EN NO MS DE 1. PARA MANTENERLO BALANCEADO ES NECESARIO SABER LA ALTURA O LA DIFERENCIA EN ALTURAS DE TODOS LOS SUBRBOLES: SE DEBE TENER QUE GUARDAR INFORMACIN ADICIONAL EN CADA NODO: UN CONTADOR DE LA DIFERENCIA ENTRE LAS ALTURAS DE SUS DOS SUBRBOLES. LOS RBOLES AVL FUERON NOMBRADOS POR SUS DESARROLLADORES ADELSON - VELSKII Y LANDIS. PROBABLEMENTE LA PRINCIPAL CARACTERSTICA DE LOS RBOLES AVL ES SU EXELENTE TIEMPO DE EJECUCIN PARA LAS DIFERENTES OPERACIONES (BSQUEDAS, ALTAS Y BAJAS). EN LAS SIGUIENTES DOS FIGURAS LA PRIMERA ES UN RBOL AVL Y LA SEGUNDA NO LO ES YA QUE LOS SUBRBOLES DEL NODO L DIFIEREN EN ALTURA POR MS DE 1.

RBOLES GENERALES Y BINARIOS

57

RBOLES GENERALES Y BINARIOS

58

RBOLES AVL
UN EJEMPLO DE ARBOL AVL ES EL RBOL (a), MIENTRAS QUE EL RBOL (b) NO LO ES.

RBOLES MULTIWAY

RBOLES GENERALES Y BINARIOS

59

RBOLES GENERALES Y BINARIOS

60

RBOLES MULTIWAY
LOS RBOLES SON UTILIZADOS PARA ALMACENAR INFORMACIN Y PARA PODER ACCEDERLA. CUANDO SE TRATA DE VOLMENES MUY GRANDES DE DATOS ALMACENADOS EN DISCO DURO, LAS ESTRUCTURAS Y ESTRATEGIAS DE BSQUEDA VISTAS ANTERIORMENTE RESULTAN INEFICIENTES, ESPECIALMENTE POR EL ALTO NMERO DE ACCESOS AL DISCO. PARA EVITAR TENER QUE HACER MUCHOS ACCESOS A DISCO ES RAZONABLE TENER VARIAS CLAVES EN CADA NODO DEL RBOL. CUANDO LA INFORMACIN DE VARIOS NODOS SE JUNTA FORMANDO PEQUEOS GRUPOS A ESTOS SE LES LLAMA PGINAS. SI EN CADA ACCESO A DISCO UN PROCEDIMIENTO PUEDE LEER TODA UNA PGINA DE DATOS EN LUGAR DE LEERLOS DE UNO EN UNO: SE PUEDE DISMINUIR SIGNIFICATIVAMENTE EL NMERO DE ACCESOS NECESARIOS PARA ENCONTRAR UN DETERMINADO DATO.
RBOLES GENERALES Y BINARIOS 61

RBOLES MULTIWAY
A LOS RBOLES QUE MANEJAN EN CADA NODO UNA PGINA SE LES LLAMA RBOLES MULTIWAY: CADA NODO PODR TENER UN MXIMO DE M VALORES O CLAVES Y POR CONSIGIENTE M + 1 LIGAS A SUS DECENDIENTES. LA BSQUEDA DE UNA CLAVE SERA ANLOGA A LA DE LOS RBOLES 2-3-4. INSERTAR UN DATO EN UN NODO M (ES DECIR, QUE YA EST LLENO, CON M - 1 ELEMENTOS) IMPLICA DIVIDIR DICHO NODO EN 2 NODOS DE TIPO M/2 (PARA ELLO SE ASUME QUE ES NMERO PAR): EJEMPLO, UN NODO 4 (QUE TIENE 3 ELEMENTOS) SE DIVIDE EN 2 NODOS DE TIPO 2, AL IGUAL QUE EN EL CASO DE LOS RBOLES 2-3-4.

RBOLES GENERALES Y BINARIOS

62

RBOLES MULTIWAY
EL TAMAO DE UNA PGINA NO ES TOTALMENTE ARBITRARIO: A MAYOR TAMAO EL TIEMPO PARA PROCESARLA ES MAYOR. DEPENDE TAMBIN DE LA CANTIDAD DE MEMORIA PRINCIPAL DISPONIBLE.

RBOLES B

RBOLES GENERALES Y BINARIOS

63

RBOLES GENERALES Y BINARIOS

64

RBOLES B
ESTE TIPO DE RBOLES FUE LLAMADO RBOLES B POR R. BAYER Y E. McCREIGHT, LOS PRIMEROS EN CONSIDERAR EL USO DE ESTOS RBOLES DE TIPO MULTIWAY. UN RBOL B DE ORDEN w CUMPLE CON LAS SIGUIENTES PROPIEDADES: TODA PGINA, EXCEPTO LA RAZ CONTIENE AL MENOS w CLAVES. LA RAZ CONTIENE AL MENOS UNA CLAVE. LA RAZ TIENE AL MENOS 2 DESCENDIENTES. TODA PGINA CONTIENE A LO SUMO 2 w CLAVES. TODA PGINA EXCEPTO LAS HOJAS TIENE m + 1 DECENDIENTES, DNDE m ES EL NMERO DE CLAVES EN LA PGINA. LAS HOJAS NO TIENEN DECENDIENTES. TODAS LAS HOJAS ESTN EN EL MISMO NIVEL.

RBOLES B
CADA NODO PGINA ES REPRESENTADO POR UNA ESTRUCTURA QUE TIENE: UN ESPACIO PARA 2 w CLAVES Y 2 w + 1 APUNTADORES HACIA SUS DECENDIENTES. UN CAMPO CON UN VALOR QUE INDICA EL NMERO ACTUAL DE CLAVES EN LA PGINA. ESTE TIPO DE RBOLES SLO SON TILES CUANDO SON DE ORDEN MAYOR O IGUAL A 3. LAS OPERACIONES DE ALTAS Y BAJAS EN UN RBOL B NO ALTERAN SU BALANCE.

RBOLES GENERALES Y BINARIOS

65

RBOLES GENERALES Y BINARIOS

66

RBOLES B
ALTAS Y BAJAS EN UN RBOL B EJEMPLO DE UNA ALTA EN UN RBOL B: SE DA DE ALTA EL DATO 50:

RBOLES B
EJEMPLO DE UNA BAJA EN UN RBOL B:

RBOLES GENERALES Y BINARIOS

67

RBOLES GENERALES Y BINARIOS

68

RBOLES B

RBOLES B
EJEMPLO PASO A PASO DE LA BAJA DEL N 76 EN UN RBOL B:

RBOLES GENERALES Y BINARIOS

69

RBOLES GENERALES Y BINARIOS

70

RBOLES B+

RBOLES B+
UNA VARIACIN A LOS RBOLES B CONSISTE EN QUE TODAS LAS CLAVES ESTN EN LAS HOJAS MIENTRAS QUE LOS NODOS NO TERMINALES CONTIENEN LOS NDICES PARA LAS CLAVES. ADICIONALMENTE LAS HOJAS ESTN CONECTADAS SECUENCIALMENTE. EN ESTOS RBOLES SE REQUIEREN 2 TIPOS DE ESTRUCTURAS: UNA PARA REPRESENTAR LOS NODOS NO TERMINALES: IGUAL A LA DE LOS RBOLES B. OTRA PARA LAS HOJAS: TIENE UN APUNTADOR ADICIONAL PARA APUNTAR A LA SIGUIENTE HOJA. ESTOS RBOLES SON ESPECIALMENTE TILES PARA APLICACIONES QUE REQUIEREN AMBOS TIPOS DE ACCESO, SECUENCIAL Y ALEATORIO.

RBOLES GENERALES Y BINARIOS

71

RBOLES GENERALES Y BINARIOS

72

RBOLES B+
PARA BUSCAR UN DATO EN ESTOS RBOLES ES NECESARIO RECORRER UN CAMINO COMPLETO HASTA LA HOJA CORRESPONDIENTE SIGUIENDO LOS NDICES: EL TIEMPO DE BSQUEDA ES SIEMPRE CONSTANTE. LAS BAJAS SON DIFERENTES: CUANDO SE ELIMINA UN DATO SE TIENEN QUE MOVER Y REAJUSTAR ELEMENTOS PARA EVITAR HUECOS Y PARA QUE LA INFORMACIN EN LOS NODOS NO - TERMINALES ASOCIADOS NO CAMBIE. SI UNA PGINA TIENE MENOS DE LA MITAD DE ELEMENTOS (UNDERFLOW) ES NECESARIO BALANCEAR EL RBOL. PARA BALANCEAR SE REDISTRIBUYEN LOS DATOS O SE CONCATENAN PGINAS.

RBOLES B+

RBOLES GENERALES Y BINARIOS

73

RBOLES GENERALES Y BINARIOS

74

RBOLES BINARIOS HILVANADOS

RBOLES BINARIOS HILVANADOS


AL ESTUDIAR LA REPRESENTACIN ENLAZADA DE UN RBOL BINARIO ES FCIL OBSERVAR QUE EXISTEN MUCHOS ENLACES NULOS. DE HECHO, PUEDEN EXISTIR MS ENLACES NULOS QUE PUNTEROS CON VALORES REALES. PARA UN RBOL CON N NODOS, EXISTEN N+1 ENLACES NULOS DE LOS 2N ENLACES EXISTENTES EN LA REPRESENTACIN (MS DE LA MITAD). COMO EL ESPACIO DE MEMORIA OCUPADO POR LOS ENLACES NULOS ES EL MISMO QUE EL OCUPADO POR LOS NO NULOS, PODRA RESULTAR CONVENIENTE UTILIZAR ESTOS ENLACES NULOS PARA ALMACENAR ALGUNA INFORMACIN DE INTERS PARA LA MANIPULACIN DEL RBOL BINARIO. UNA FORMA DE UTILIZAR ESTOS ENLACES ES SUSTITUIRLOS POR PUNTEROS A OTROS NODOS DEL RBOL.

RBOLES GENERALES Y BINARIOS

75

RBOLES GENERALES Y BINARIOS

76

RBOLES BINARIOS HILVANADOS


LOS ENLACES NULOS SITUADOS EN EL SUBRBOL DERECHO DE UN NODO SE SUELEN REUTILIZAR PARA APUNTAR AL SUCESOR DE ESE NODO EN UN DETERMINADO RECORRIDO DEL RBOL, POR EJEMPLO INFIJO. LOS ENLACES NULOS EN SUBRBOLES IZQUIERDOS SE UTILIZAN PARA APUNTAR AL PREDECESOR DEL NODO EN EL MISMO TIPO DE RECORRIDO. SI PARA ALGN NODO NO EXISTE PREDECESOR (PORQUE ES EL PRIMERO DEL RECORRIDO) O SUCESOR (PORQUE ES EL LTIMO), SE MANTIENE CON VALOR NULO EL ENLACE CORRESPONDIENTE. OTRA VENTAJA ES LA POSIBILIDAD DE UN ACCESO RPIDO AL SUCESOR (O AL PREDECESOR) DE UN NODO, QUE ES UNA OPERACIN FRECUENTEMENTE NECESARIA.

RBOLES BINARIOS HILVANADOS

RBOLES GENERALES Y BINARIOS

77

RBOLES GENERALES Y BINARIOS

78

RBOLES BINARIOS HILVANADOS


PARA PODER MANEJAR CORRECTAMENTE TODA LA INFORMACIN DE LA QUE SE DISPONE EN LA REPRESENTACIN HILVANADA (CON HILOS) DEL RBOL BINARIO, ES NECESARIO PODER DISTINGUIR ENTRE LO QUE SON PUNTEROS NORMALES, QUE REPRESENTAN LAS RELACIONES REALES ENTRE LOS NODOS, Y LO QUE SON HILOS. ESTO SE PUEDE HACER AADIENDO DOS CAMPOS BOOLEANOS A LA REPRESENTACIN DE LOS NODOS DEL RBOL. ESTOS NUEVOS CAMPOS INDICARN SI LOS ENLACES IZQUIERDO Y DERECHO SON HILOS O NO. CON EL OBJETO DE NO MANTENER ABSOLUTAMENTE NINGN ENLACE NULO Y PARA FACILITAR EL RECORRIDO DEL RBOL, SE SUELE AADIR A LA ESTRUCTURA UN NODO RAZ QUE NO CONTIENE INFORMACIN REAL.

RBOLES BINARIOS HILVANADOS


EL NODO RAZ QUE REPRESENTA EL RBOL VACO TENDR LA ESTRUCTURA QUE SE MUESTRA EN LA FIGURA:

RBOLES GENERALES Y BINARIOS

79

RBOLES GENERALES Y BINARIOS

80

RBOLES BINARIOS HILVANADOS


EN GENERAL, LA UTILIZACIN DE ENLACES HILOS SIMPLIFICA LOS ALGORITMOS DE RECORRIDO DEL RBOL, POR LO QUE SON RECOMENDABLES CUANDO EL RECORRIDO DEL RBOL ES UNA OPERACIN FRECUENTE. DESDE EL PUNTO DE VISTA DE LA MANIPULACIN GENERAL DEL RBOL HAY QUE TENER EN CUENTA QUE: LA INSERCIN DE NUEVOS NODOS DEBE MANTENER EN TODO MOMENTO ESTA ESTRUCTURA DE ENLACES CON LOS NODOS SUCESOR Y PREDECESOR. CADA VEZ QUE SE INSERTE UN NODO SE DEBER COMPROBAR SI EXISTEN ENLACES DE ESTE TIPO QUE DEBAN SER MODIFICADOS O CREADOS, ADEMS DE LOS PUNTEROS NORMALES QUE RELACIONAN LOS NODOS DEL RBOL.

RBOLES GENERALES Y BINARIOS

81

S-ar putea să vă placă și