Estructura de Datos : Arboles Binarios - Fundamentos


Definiciones


Ejemplos

        *---*    *---*                        *---*                    *---*
        | A |    | A |                        | A |                    | A |                ......... Nivel 1
        *---*    *---*                        *---*                    *---*
         |          |                          |                        | |
      +--+          +--+                    +--+                 +------+ +------+
      |                |                    |                    |               |
    *---*            *---*                *---*                *---*           *---*
    | B |            | B |                | B |                | B |           | C |        ......... Nivel 2
    *---*            *---*                *---*                *---*           *---*
                                           |                    | |             | |
                                        +--+                 +--+ +--+       +--+ +--+
                                        |                    |       |       |       |
                                      *---*                *---*   *---*   *---*   *---*
                                      | C |                | D |   | E |   | F |   | G |    ......... Nivel 3
                                      *---*                *---*   *---*   *---*   *---*
                                       |                    | |
                                    +--+                 +--+ +--+
                                    |                    |       |
                                  *---*                *---*   *---*
                                  | D |                | H |   | I |                        ......... Nivel 4
                                  *---*                *---*   *---*
                                   |
                                +--+
                                |
                              *---*
                              | E |                                                         ......... Nivel 5
                              *---*

     Arbol 1      Arbol 2            Arbol 3                          Arbol 4
                                                                                                Profundidad   Nodos por Nivel   Nodos a Profundidad
                                          *---*
                            comenzar .....| 1 |...................>......                            1          2**(1-0)=1          (2**1)-1=1
                                          *---*                         .
                                           | |                          .
                            +--------------+ +--------------+           .
             .....<.........|...............<...............|.....<......
             .            *---*                           *---*
             .....>.......| 2 |.............>.............| 3 |...>................                  2          2**(2-0)=2          (2**2)-1=3
                          *---*                           *---*                   .
                           | |                             | |                    .
                    +------+ +------+               +------+ +------+             .
      ......<.......|...............|.......<.......|...............|.......<......
      .           *---*           *---*           *---*           *---*
      ......>.....| 4 |...........| 5 |.....>.....| 6 |...........| 7 |.....>..........              3          2**(3-0)=4          (2**3)-1=7
                  *---*           *---*           *---*           *---*               .
                   | |             | |             | |             | |                .
                +--+ +--+       +--+ +--+       +--+ +--+       +--+ +--+             .
  ......<.......|.......|.......|.......|...<...|.......|.......|.......|.......<......
  .           *---*   *---*   *---*   *---*   *---*   *---*   *---*   *---*
  ......>.....| 8 |...| 9 |...|1 0|...|1 1|.>.|1 2|...|1 3|...|1 4|...|1 5|..... terminar            4          2**(4-0)=8          (2**4)-1=1
              *---*   *---*   *---*   *---*   *---*   *---*   *---*   *---*
                                                                                                     .
                                         Arbol 5                                                     .
                                                                                                     .

                                                                                                     k          2**(k-0)=n          (2**k)-1=m
El Arbol 1 y el Arbol 2 son árboles binarios distintos, ya que si bien tienen los mismos nodos su disposición es diferente, árboles binarios que si fueran árboles comunes, serían el mismo árbol común. El Arbol 3 es un árbol binario sesgado. El Arbol 4 es un árbol completo. El Arbol 5 es un árbol lleno. Los nodos de un árbol pueden enumerarse, como puede verse en el Arbol 5, numerándolos nivel a nivel, de isquierda a derecha.


Interfases

Observar que MAKEBT() lleva a armar el árbol desde abajo hacia arriba, desde los nodos hojas hacia el nodo raíz.


Terminología

  1. Arbol Binario ( BTree )
  2. Arbol Binario Sesgado ( Skewed BTree ) En inglés skew significa sego, sesgar, torcerse.
  3. Arbol Binario Completo ( Completed BTree )
  4. Arbol Binario Lleno ( Full BTree )
  5. Subárbol Isquierdo ( Left Subtree )
  6. Subárbol Derecho ( Right Sbutree )
  7. Nodo ( Node ) También llamado vértice o elemento del árbol. Es el contenedor de los datos y los enlaces a sus hijos y a su padre.
  8. Nodo Raíz ( Root Node ) Es el nodo donde comienza el árbol. Cada árbol tiene solamente un nodo raíz, desde el cual cuelgan todos sus descendientes.
  9. Nodo Rama ( Branch Node ) También llamado nodo interior o interno. Es un nodo cualquiera que puede tener hijos, aunque en este preciso momento no los tenga.
  10. Nodos de Grado Cero ( n0 )
  11. Nodos de Grado Uno ( n1 )
  12. Nodos de Grado Dos ( n2 )


Lemas

  1. El máximo número de nodos en un nivel i de un árbol binario es 2 ** ( i - 1 ), para i >= 1.
  2. El máximo número de nodos en un árbol binario de profundidad k es ( 2 ** k ) - 1, para k >= 1.
  3. Para cualquier árbol binario no vacio, si n0 es el número de nodos terminales y n2 es el número de nodos de grado 2, luego n0 = n2 + 1.
  4. La profundidad de un árbol binario completo es el entero piso de log2 n, más 1.
  5. Para cualquier árbol binario completo con n nodos que es representado secuencialmente, para cualquier nodo de índice i, para 1 =< i <= n, se tiene :
    • PARENT(i) está en el índice entero piso de i / 2, si i es distinto de 1, y si i es igual a 1, es el nodo raíz y no tiene padre.
    • LCHILD(i) está en el índice 2 * i, si 2 * i es menor que n, y si 2 * i es mayor que n, no tiene hijo isquierdo.
    • RCHILD(i) está en el índice ( 2 * i ) + 1, si ( 2 * i ) + 1 es menor que n, y si ( 2 * i ) + 1 es mayor que n, no tiene hijo derecho.


Representaciones

Representaciones Secuenciales

                    *-----*                     *-----*
               (1)  |  A  |                (1)  |  A  |
                    |-----|                     |-----|
               (2)  |  B  |                (2)  |  B  |
                    |-----|                     |-----|
               (3)  |     |                (3)  |  C  |
                    |-----|                     |-----|
               (4)  |  C  |                (4)  |  D  |
                    |-----|                     |-----|
               (5)  |     |                (5)  |  E  |
                    |-----|                     |-----|
               (6)  |     |                (6)  |  F  |
                    |-----|                     |-----|
               (7)  |     |                (7)  |  G  |
                    |-----|                     |-----|
               (8)  |  D  |                (8)  |  H  |
                    |-----|                     |-----|
               (9)  |     |                (9)  |  I  |
                    |-----|                     *-----*
                .      .
                .      .
                .      .
                    |-----|
              (16)  |  E  |
                    *-----*

                    Arbol 3                     Arbol 4
Observar que esta representación está basada en la enumeración de los nodos y en uno de los lemas vistos en el punto anterior.

Representaciones Enlazadas

          *------------------------*                          *------------------------*
          | LCHILD | DATA | RCHILD |                          |    *   | DATA |   *    |
          *------------------------*                          *----|--------------|----*
                                                                   |              |
              1 Nodo - 3 Campos                            +-------+              +-------+
                                                           |                              |
                                              *------------------------*      *------------------------*
                                              |        | DATA |        |      |        | DATA |        |
                                              *------------------------*      *------------------------*

                                                        LCHILD                          RCHILD


       *---------------------*                                                                *---------------------*
T ---> |   *   |  A  |   0   |                                                         T ---> |   *   |  A  |   *   |
       *---|-----------------*                                                                *---|-------------|---*
           |                                                                   +------------------+             +------------------+
           V                                                                   V                                                   V
       *---------------------*                                      *---------------------*                             *---------------------*
       |   *   |  B  |   0   |                                      |   *   |  B  |   *   |                             |   *   |  C  |   *   |
       *---|-----------------*                                      *---|-------------|---*                             *---|-------------|---*
           |                                                      +-----+             +-----+                         +-----+             +-----+
           V                                                      V                         V                         V                         V
       *---------------------*                         *---------------------*   *---------------------*   *---------------------*   *---------------------*
       |   *   |  C  |   0   |                         |   *   |  D  |   *   |   |   0   |  E  |   0   |   |   0   |  F  |   0   |   |   0   |  G  |   0   |
       *---|-----------------*                         *---|-------------|---*   *---------------------*   *---------------------*   *---------------------*
           |                                         +-----+             +-----+
           V                                         V                         V
       *---------------------*            *---------------------*   *---------------------*
       |   *   |  D  |   0   |            |   0   |  H  |   0   |   |   0   |  I  |   0   |
       *---|-----------------*            *---------------------*   *---------------------*
           |
           V
       *---------------------*
       |       |  E  |       |
       *---------------------*

               Arbol 3                                                                                Arbol 4
Observar que con esta representación solo es posible navegar desde la raíz hacia los hijos, y nunca volver hacia el padre.

Representaciones Orientadas a Objetos

                                                                                                                       Nodo  A
    *---------------------------------------*                                                                     *---------------*
    |                                       |                                                                     |     *---*     |
    |                 *---*                 |                                                                     |     | 0 |     |
    |                 |   |                 |   Padre                                                ............>|     *---*     |<............
    |                 *---*                 |   Campo de enlace                                      .            |   *---*---*   |            .
    |                                       |                               *---*                    .            |   | . | . |   |            .
    |                                       |                               | A |                    .            |   *-.-*-.-*   |            .
    |     *---------- ..... ----------*     |                               *---*                    .            *-----.---.-----*            .
    |     |   |   |           |   |   |     |   Datos                        | |                     .                  .   .                  .     Para simplificar
    |     *---------- ..... ----------*     |   Campos de informacion     +--+ +--+               *--.------------*     .   .     *------------.--*  el dibujo se
    |                                       |                             |       |               |  .  *---*     |     .   .   C |     *---*  .  |  omitieron los
    |                                       |                           *---*   *---*             |  ...... |     |     .   .     |     | ......  |  campos de informacion
    |               *-------*               |                           | B |   | C |             |     *---*     |<.....   .....>|     *---*     |
    |               |   |   |               |   Hijos                   *---*   *---*             |   *---*---*   |               |   *---*---*   |
    |               *-------*               |   Campos de enlaces                                 |   | 0 | 0 |   |               |   | 0 | 0 |   |
    |                                       |                                                     |   *---*---*   |               |   *---*---*   |
    *---------------------------------------*                                                     *---------------*               *---------------*
                                                                           Arbol 6                     Nodo  B         Arbol 6         Nodo  C


Travesías de Arboles Binarios

En inglés este algoritmo se conoce como Binary Tree Traversal. Traversal significa travesía. Existen alternativas de este algoritmo según el órden en que se visite el nodo, entendido como el procesamiento de los datos que contiene el mismo. Si señalamos con :

deben considerarse las siguientes alternativas :
  1. LDR ----> Inorder
  2. LRD ----> Postorder
  3. DLR ----> Preorder
  4. DRL
  5. RDL
  6. RLD
donde las alternativas 5, 6 y 7 no se usan, ya que se restringen las travesías, a las que usan seguir el hijo isquierdo en primer instancia, ignorándose las restantes.

Travesia En Orden ( Inorder Traversal )

Travesia Pre Orden ( Preorder Traversal )

Travesia Post Orden ( Postorder Traversal )

Ejemplos

                    *---*
                    | + |
                    *---*
                     | |
              +------+ +------+
              |               |
            *---*           *---*
            | * |           | E |        Inorder   ----> A / B ** C * D + E
            *---*           *---*
             | |
          +--+ +--+
          |       |
        *---*   *---*
        | / |   | D |                    Preorder  ----> + * / A ** B C D E
        *---*   *---*
         | |
      +--+ +--+
      |       |
    *---*   *---*
    | A |   | **|                        Postorder ----> A B C ** / D * E +
    *---*   *---*
             | |
          +--+ +--+
          |       |
        *---*   *---*
        | B |   | C |
        *---*   *---*

                   Arbol 8


Nodos y Enlaces

Observar que en un árbol binario de n nodos, si atendemos solo a los enlaces hacia sus hijos, tenemos :


Clasificaciónes de Arboles Binarios