SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
Á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
                                                    H


Franco Guidi Polanco                                                                 3   Franco Guidi Polanco                                                  4
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árbol

Franco 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 c
Franco Guidi Polanco                                                                              7   Franco Guidi Polanco                                                                         8
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                  h
Franco 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                 h
Franco Guidi Polanco                                                                         11    Franco Guidi Polanco                                           12
Á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                   b



Franco Guidi Polanco                                                       15    Franco Guidi Polanco                                                     16
Á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. lleno


Franco 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

                                                                                                                                     f

Franco Guidi Polanco                                                          19   Franco Guidi Polanco                                                          20
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:40


Franco 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 h

Franco Guidi Polanco                                                                                              23   Franco Guidi Polanco                                                          24
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       3


Franco 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 h
Franco Guidi Polanco                                     27   Franco Guidi Polanco                                               28
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 h
Franco 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         2


Franco Guidi Polanco                                               31   Franco Guidi Polanco                                                32
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 a
Franco 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 ABB

Franco Guidi Polanco                                                       35   Franco Guidi Polanco                                                              36
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 18




Franco Guidi Polanco                                                                      39   Franco Guidi Polanco                                                             40
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 infructuosa


Franco Guidi Polanco                                            43   Franco Guidi Polanco                                                         44
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                      12




Franco 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
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

Más contenido relacionado

Destacado

Power metodos
Power metodosPower metodos
Power metodosmarilis17
 
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiu
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiuI2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiu
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiullisard
 
Argentina.p.point
Argentina.p.pointArgentina.p.point
Argentina.p.pointmvpaiz
 
Mi actitud ante el aprendizaje.pptxinte
Mi actitud ante el aprendizaje.pptxinteMi actitud ante el aprendizaje.pptxinte
Mi actitud ante el aprendizaje.pptxinteCynthia Qintero
 
Formatos de vídeo
Formatos de vídeoFormatos de vídeo
Formatos de vídeoMartaaa42
 
Tarea de medios digitales amor y odio
Tarea de medios digitales amor y odioTarea de medios digitales amor y odio
Tarea de medios digitales amor y odioSandi1604
 
Sustentacion proyecto 4: webcast
Sustentacion proyecto 4: webcastSustentacion proyecto 4: webcast
Sustentacion proyecto 4: webcastkastquito
 
Glosario
GlosarioGlosario
Glosariosune306
 
Mi proyecto de_vida
Mi proyecto de_vidaMi proyecto de_vida
Mi proyecto de_vidakevin98
 
Presentación2
Presentación2Presentación2
Presentación2infor4
 
Ciudadania, politica y redes sociales
Ciudadania, politica y redes socialesCiudadania, politica y redes sociales
Ciudadania, politica y redes socialesGermán Sandoval
 
Material de apoyo de la unidad iii hod654
Material de apoyo de la unidad iii hod654Material de apoyo de la unidad iii hod654
Material de apoyo de la unidad iii hod654Maidolly Engelhardt
 
Trabajo practico 6
Trabajo practico 6Trabajo practico 6
Trabajo practico 6tomas-p
 

Destacado (20)

Power metodos
Power metodosPower metodos
Power metodos
 
Computacion 1
Computacion 1Computacion 1
Computacion 1
 
Tiesto
TiestoTiesto
Tiesto
 
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiu
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiuI2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiu
I2 4 eso_a_03_lcc_u8_control_pràctic_validació_definitiu
 
Presentación Colón
Presentación ColónPresentación Colón
Presentación Colón
 
Argentina.p.point
Argentina.p.pointArgentina.p.point
Argentina.p.point
 
Mi actitud ante el aprendizaje.pptxinte
Mi actitud ante el aprendizaje.pptxinteMi actitud ante el aprendizaje.pptxinte
Mi actitud ante el aprendizaje.pptxinte
 
Formatos de vídeo
Formatos de vídeoFormatos de vídeo
Formatos de vídeo
 
Exposicion de economia2
Exposicion de economia2Exposicion de economia2
Exposicion de economia2
 
Proyecto Escolar.
Proyecto Escolar.Proyecto Escolar.
Proyecto Escolar.
 
Antonio Cardenas Inem Para arar en el desierto
Antonio Cardenas Inem Para arar en el desierto Antonio Cardenas Inem Para arar en el desierto
Antonio Cardenas Inem Para arar en el desierto
 
Tarea de medios digitales amor y odio
Tarea de medios digitales amor y odioTarea de medios digitales amor y odio
Tarea de medios digitales amor y odio
 
Tutorial glogster
Tutorial glogsterTutorial glogster
Tutorial glogster
 
Sustentacion proyecto 4: webcast
Sustentacion proyecto 4: webcastSustentacion proyecto 4: webcast
Sustentacion proyecto 4: webcast
 
Glosario
GlosarioGlosario
Glosario
 
Mi proyecto de_vida
Mi proyecto de_vidaMi proyecto de_vida
Mi proyecto de_vida
 
Presentación2
Presentación2Presentación2
Presentación2
 
Ciudadania, politica y redes sociales
Ciudadania, politica y redes socialesCiudadania, politica y redes sociales
Ciudadania, politica y redes sociales
 
Material de apoyo de la unidad iii hod654
Material de apoyo de la unidad iii hod654Material de apoyo de la unidad iii hod654
Material de apoyo de la unidad iii hod654
 
Trabajo practico 6
Trabajo practico 6Trabajo practico 6
Trabajo practico 6
 

Más de Pedro Hugo Valencia Morales (9)

Árboles como Estructura de Datos
Árboles como Estructura de DatosÁrboles como Estructura de Datos
Árboles como Estructura de Datos
 
C++ io manipulation
C++ io manipulationC++ io manipulation
C++ io manipulation
 
Colas de prioridad
Colas de prioridadColas de prioridad
Colas de prioridad
 
Heaps & priority queues
Heaps & priority queuesHeaps & priority queues
Heaps & priority queues
 
Tema4 programación generica
Tema4   programación genericaTema4   programación generica
Tema4 programación generica
 
Arboles02
Arboles02Arboles02
Arboles02
 
Arboles01
Arboles01Arboles01
Arboles01
 
Arquitectura ssdd
Arquitectura ssddArquitectura ssdd
Arquitectura ssdd
 
Cap02 modelos1
Cap02 modelos1Cap02 modelos1
Cap02 modelos1
 

Árbol: definición y representación de árboles binarios

  • 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 H Franco Guidi Polanco 3 Franco Guidi Polanco 4
  • 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árbol Franco 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 c Franco Guidi Polanco 7 Franco Guidi Polanco 8
  • 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 h Franco 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 h Franco Guidi Polanco 11 Franco Guidi Polanco 12
  • 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 b Franco Guidi Polanco 15 Franco Guidi Polanco 16
  • 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. lleno Franco 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 f Franco Guidi Polanco 19 Franco Guidi Polanco 20
  • 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:40 Franco 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 h Franco Guidi Polanco 23 Franco Guidi Polanco 24
  • 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 3 Franco 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 h Franco Guidi Polanco 27 Franco Guidi Polanco 28
  • 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 h Franco 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 2 Franco Guidi Polanco 31 Franco Guidi Polanco 32
  • 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 a Franco 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 ABB Franco Guidi Polanco 35 Franco Guidi Polanco 36
  • 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 18 Franco Guidi Polanco 39 Franco Guidi Polanco 40
  • 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 infructuosa Franco Guidi Polanco 43 Franco Guidi Polanco 44
  • 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 12 Franco 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. 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