Arboles03

2.922 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
2.922
En SlideShare
0
De insertados
0
Número de insertados
4
Acciones
Compartido
0
Descargas
104
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Arboles03

  1. 1. Árbol: definición Árbol (del latín arbor –oris): Planta perenne, de tronco leñoso y elevado, que se ramifica a cierta altura del suelo. (otras, ver Real Academia Española…) Árboles binarios Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile fguidi@ucv.cl Actualización: 13 de mayo de 2005 Franco Guidi Polanco 2 Árbol: definición (cont.) Árbol: definición (cont.) Árbol: Árbol: Grafo conexo, no orientado y acíclico. Una estructura de datos accesada desde un nodo raíz. Cada nodo es ya sea una hoja o un nodo interno. Un nodo interno tiene uno o más nodos hijos, y se le llama padre de sus nodos hijos. C A E Un árbol es, ya sea: • un conjunto vacío, o B • una raíz con cero D o más árboles HFranco Guidi Polanco 3 Franco Guidi Polanco 4
  2. 2. Hojas y nodos internos Representación de un árbol Una hoja es cualquier nodo que tiene sus hijos a raíz vacíos. Un nodo interno es cualquier nodo con al menos subárbol un hijo no vacío. b c d e a Nodos internos b c f g h i j subárbol k d e f l m subárbol Hojas g h subárbolFranco Guidi Polanco 5 Franco Guidi Polanco 6 Representación de un árbol (cont.) Nodos padres e hijos a Las raíces de los subárboles de un árbol son hijos de la raíz del árbol. Existe un arco desde cada nodo a cada uno de sus hijos, y se dice que este nodo es padre de sus b c d hijos. e f g h i j k l m subárbol de nodo e subárboles de nodo b subárboles de nodo cFranco Guidi Polanco 7 Franco Guidi Polanco 8
  3. 3. Ruta y largo de una ruta Ancestros y descendientes Si n1, n2,... nk es una secuencia de nodos en un Si existe una ruta desde un nodo A a un nodo B, árbol, de modo que ni es padre de ni + 1, para entonces A es ancestro de B y B es 1<=i<=k, entonces esta secuencia se llama ruta descendiente de A. desde n1 a nk. Luego, todos los nodos de un árbol son El largo de esta ruta es k. descendientes de la raíz del árbol, mientras que la raíz es el ancestro de todos los nodos. a n1 b c n2 d e f n3 g hFranco Guidi Polanco 9 Franco Guidi Polanco 10 Altura Niveles La altura de un nodo M de un árbol corresponde Todos los nodos de altura d están en el nivel d en al número de nodos en la ruta desde la raíz hasta el árbol. M. La raíz está en el nivel 1, y su altura es 1. La altura de un árbol corresponde a la altura del nodo más profundo. Nivel 1 a a Nivel 2 b c Altura del b c nodo=2 Altura del árbol=4 Nivel 3 d e f d e f Nivel 4 g h g hFranco Guidi Polanco 11 Franco Guidi Polanco 12
  4. 4. Árboles binarios Representación de un árbol binario (I) Un A.B. está constituido por un conjunto finito de elementos llamados nodos. raíz subárbol izquierdo a subárbol derecho Un árbol binario: no tiene nodos (está vacío); o b c tiene un nodo llamado raíz, junto con otros dos árboles binarios llamados subárboles derecho e izquierdo d e f de la raíz. g h Nota: Una parte importante del material presentado en esta sección fue elaborado por Marcelo Silva F.Franco Guidi Polanco 13 Franco Guidi Polanco 14 Representación de un árbol binario (II) Igualdad de árboles binarios Para ser iguales, dos árboles deben tener tanto la misma estructura, como el mismo contenido. raíz a subárbol derecho b c d e f subárbol izquierdo a a g h ≠ b bFranco Guidi Polanco 15 Franco Guidi Polanco 16
  5. 5. Árboles binarios llenos Árboles binarios completos Un árbol binario lleno es aquel en que cada nodo Un árbol binario completo tiene una forma es un nodo interno con dos hijos no vacíos, o una restringida, que se obtiene al ser llenado de hoja. izquierda a derecha. En un A.B. Completo de altura d, todos los niveles, excepto posiblemente el nivel d están completamente llenos. a a b c b c a d e f e f Es un A.B. completo b c pero no es un A.B. lleno g h g h d e f No es A.B. lleno Es A.B. llenoFranco Guidi Polanco 17 Franco Guidi Polanco 18 Representación de árboles binarios mediante Número de nodos en un árbol binario nodos y referencias El máximo número de nodos en el nivel i de un árbol binario es 2(i-1). El máximo número de nodos en un árbol binario a de altura K es 2(K)-1. b c d e fFranco Guidi Polanco 19 Franco Guidi Polanco 20
  6. 6. Diagrama de clases de un árbol binario Diagrama de objetos de un árbol binario Diagrama de clases árbol binario de enteros: :ABB root:ABBNode ABB ABBNode 1..1 data:int data:20 insert(i:int) find(d:Data):boolean root setData(i:int) delete(i:int) getData():int :ABBNode :ABBNode setLeft(n:ABBNode) getLeft():ABBNode data:7 data:32 left setRight(n:ABBNode) right getRight():ABBNode isLeaf():boolean :ABBNode :ABBNode :ABBNode data:2 data:15 data:40Franco Guidi Polanco 21 Franco Guidi Polanco 22 Representación de árboles binarios mediante Recorrido de árboles binarios arreglos Si la raíz de un subárbol se almacena en A[i], su Un recorrido es cualquier proceso destinado a hijo izquierdo se almacena en A[2*i], y su hijo visitar los nodos de un árbol binario en un derecho en A[2*i+1]. determinado orden. Cualquier recorrido que visite cada nodo a exactamente una vez, se denomina una enumeración de los nodos del árbol. b c Recorridos de enumeración a analizar: Preorden d e f Inorden Postorden g h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a b c d e f g hFranco Guidi Polanco 23 Franco Guidi Polanco 24
  7. 7. Recorrido en Preorden Código para recorrido Preorden Dado un árbol binario: void preorder(BinNode rt) // rt es la raíz del subarbol { 1) Visitar su raíz. if (rt==null) 2) Recorrer en preorden su subárbol izquierdo. return; visit(rt) // subarbol vacío // hace algo con el nodo 3) Recorrer en preorden su subárbol derecho. preorder(rt.left()); preorder(rt.right()); } 1 2 3Franco Guidi Polanco 25 Franco Guidi Polanco 26 Ejemplo de recorrido en Preorden Recorrido en Inorden Dado un árbol binario: a 1 b c 1) Recorrer en inorden su subárbol izquierdo. 2 3 d e f 2) Visitar su raíz. 3) Recorrer en inorden su subárbol derecho. g h i 2 j k 1 3 a b d c e f g i j k hFranco Guidi Polanco 27 Franco Guidi Polanco 28
  8. 8. Código para recorrido Inorden Ejemplo de recorrido en Inorden 2 a void inorder(BinNode rt) // rt es la raíz del subarbol { 1 3 b c if (rt==null) return; // subarbol vacío inorder(rt.left()); d e f visit(rt) // hace algo con el nodo } inorder(rt.right()); g h i j k d b a e c g j i k f hFranco Guidi Polanco 29 Franco Guidi Polanco 30 Recorrido en Postorden Código para recorrido Postorden Dado un árbol binario: void postorder(BinNode rt) // rt es la raíz del subarbol { 1) Recorrer en postorden su subárbol izquierdo. if (rt==null) 2) Recorrer en postorden su subárbol derecho. return; // subarbol vacío postorder(rt.left()); 3) Visitar su raíz. postorder(rt.right()); visit(rt) // hace algo con el nodo } 3 1 2Franco Guidi Polanco 31 Franco Guidi Polanco 32
  9. 9. Ejemplo de recorrido en Postorden Árbol binario de búsqueda a Supongamos que tenemos un conjunto de n 3 elementos que pueden ser ordenados por alguna 1 2 b c clave. En un árbol binario de búsqueda (ABB), todos d e f los nodos almacenados en el subárbol izquierdo de g h un nodo cuyo valor clave es C tienen claves menores que C, mientras que todos los nodos i ubicados en el subárbol derecho tienen claves mayores que C. j k d b e j k i g hf c aFranco Guidi Polanco 33 Franco Guidi Polanco 34 Ejemplos de árboles binarios de búsqueda Ingreso de elementos a un ABB a { 10, 5, 7, 15, 14, 12, 18 } { 15, 18, 14, 5, 10, 12, 7 } b c 15 c d e f 10 14 18 <c >c No es ABB 5 15 5 Definición de ABB c 7 14 18 10 b e 12 7 12 a d f Es ABBFranco Guidi Polanco 35 Franco Guidi Polanco 36
  10. 10. ABB de referencia Ingreso de elementos a un ABB (cont.) ABB insert(e:Element) find(key:int):Element Element delete(i:int):Element ABBNode {interface} private BinNode insert (BinNode rt, Element val) 1 { data getKey():int if (rt == null) 1 setData(e:Element) return new BinNode(val); root getData():Element Element it = (Element)rt.element(); setLeft(n:ABBNode) if (it.key() > val.key()) getLeft():ABBNode rt.setLeft(insert(rt.left(), val)); setRight(n:ABBNode) left right else getRight():ABBNode rt.setRight(insert(rt.right(), val)); isLeaf():boolean return rt; }Franco Guidi Polanco 37 Franco Guidi Polanco 38 Características del ingreso de elementos a un ABB Recorrido Inorden en ABB Los elementos agregados a un ABB siempre son 15 incorporados inicialmente como hojas. Un conjunto de elementos dado puede generar 10 14 18 diversos ABB, dependiendo del orden en que son 5 15 ingresados. 5 7 14 18 10 12 7 12 5 7 10 12 14 15 18 5 7 10 12 14 15 18Franco Guidi Polanco 39 Franco Guidi Polanco 40
  11. 11. Características del recorrido Inorden de un ABB Búsqueda en ABB Si bien existen muchos ABBs posibles para un Para hallar un elemento con clave C, en un mismo conjunto de elementos, el recorrido árbol A: Inorden de todos estos árboles siempre entrega el Si la raíz del árbol A almacena C, la búsqueda conjunto ordenado de menor a mayor. termina exitosamente. Si C es menor que el valor de la raíz de A, buscar en el subárbol izquierdo. Si C es mayor que el valor de la raíz, buscar en el subárbol derecho. La búsqueda termina al hallar el valor C, o al pretender buscar en un subárbol vacío.Franco Guidi Polanco 41 Franco Guidi Polanco 42 Búsqueda en ABB (cont.) Ejemplo de búsqueda en ABB 10 10 Elem find(BinNode rt, int key) { if (rt == null) 5 15 5 15 return null; Element it = (Element)rt.element(); if ((int)it.key() > key) 7 14 18 7 14 18 return find(rt.left(), key); else if (it.key() == key) return it; 12 12 else return find(rt.right(), key); } Buscar 12 Buscar 16 Búsqueda exitosa Búsqueda infructuosaFranco Guidi Polanco 43 Franco Guidi Polanco 44
  12. 12. Eliminar nodo que es una hoja o tiene a lo más Eliminación de elementos de un ABB un hijo Se pueden presentar tres casos: El elemento no existe. 10 10 El elemento es una hoja o tiene a lo más un hijo. 5 15 7 15 El elemento tiene dos hijos. 7 14 18 14 18 12 12Franco Guidi Polanco 45 Franco Guidi Polanco 46 Ejemplo eliminación de nodo con dos hijos Eliminar nodo con dos hijos 1. Hallar el nodo que contiene el menor de los 10 10 elementos mayores del nodo a eliminar (el 5 15 5 16 elemento más a la izquierda de su subárbol derecho) 7 14 18 7 14 18 2. Reemplazar los datos del nodo eliminar con los del nodo hallado. 16 17 3. Eliminar el nodo hallado, que tiene a lo más El menor de los un hijo, con el procedimiento descrito 17 elementos mayores previamente. (Nodo más a la izquierda del subárbol derecho)Franco Guidi Polanco 47 Franco Guidi Polanco 48
  13. 13. Importancia de una estructura balanceada en los Utilidad de los árboles binarios de búsqueda ABB Al buscar, el ABB permite descartar a priori un La estructura de un ABB es importante al subconjunto de elementos, en forma análoga a la momento de realizar búsquedas en él. búsqueda binaria en arreglos ordenados. El ABB presenta además la ventaja de poder ser 18 implementado con punteros (estructura dinámica). 10 La incorporación y eliminación de elementos al 15 5 15 ABB es mas rápida que en arreglos ordenados. 14 3 7 14 18 10 7 En el peor de los casos se En el peor de los hacen 3 iteraciones para 5 casos se hacen 7 una búsqueda. iteraciones para 3 una búsqueda.Franco Guidi Polanco 49 Franco Guidi Polanco 50

×