arboles binarios

19
 Estructuras de Datos Ricardo Ruiz Rodríguez 67 Capítulo 6. ÁRBOLES. 6.1 Árboles binarios. Un árbol binario es un conjunto finito de elementos, el cual está vacío o dividido en tres subconjuntos separados:  El primer subconjunto contiene un elemento único llamado raíz del árbol .  El segundo subconjunto es en sí mismo un árbol binario y se le conoce como subárbol izquierdo del árbol original.

description

arboles binarios

Transcript of arboles binarios

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    67

    Captulo 6. RBOLES.

    6.1 rboles binarios. Un rbol binario es un conjunto finito de elementos, el cual est

    vaco o dividido en tres subconjuntos separados:

    El primer subconjunto contiene un elemento nico llamado raz del rbol.

    El segundo subconjunto es en s mismo un rbol binario y se le conoce como subrbol izquierdo del rbol original.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    68

    El tercer subconjunto es tambin un rbol binario y se le conoce como subrbol derecho del rbol original.

    El subrbol izquierdo o derecho puede o no estar vaco.

    Cada elemento de un rbol binario se conoce como nodo del

    rbol.

    La Ilustracin 2 muestra una representacin de un rbol binario.

    Ejercicio: Una lista podra ser un rbol binario? Una lista

    doblemente enlazada? Por qu? Qu otros ejemplos podran o no

    considerarse como rboles binarios?

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    69

    Ilustracin 2 rbol binario. Si B es la raz de un rbol binario y D es la raz del subrbol

    izquierdo/derecho, se dice que B es el padre de D y que D es el

    hijo izquierdo/derecho de B.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    70

    A un nodo que no tiene hijos, tal como A o C de la Ilustracin

    2, se le conoce como hoja.

    Un nodo n1 es un ancestro de un nodo n2 (y n2 es un

    descendiente de n1) si n1 es el padre de n2 o el padre de algn

    ancestro de n2.

    Recorrer un rbol de la raz hacia las hojas se denomina

    descender el rbol y al sentido opuesto ascender el rbol.

    Un rbol estrictamente binario es aquel en el que cada nodo

    que no es hoja, tiene subrboles izquierdo y derecho que no estn

    vacos.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    71

    Un rbol estrictamente binario con n hojas siempre contiene

    2n-1 nodos.

    El nivel de un nodo en un rbol binario se define del modo

    siguiente:

    1.La raz del rbol tiene el nivel 0.

    2.El nivel de cualquier otro nodo en el rbol es uno ms que el

    nivel de su padre.

    La profundidad o altura de un rbol binario es el mximo

    nivel de cualquier hoja en el rbol.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    72

    Un rbol binario completo de profundidad p, es un rbol

    estrictamente binario que tiene todas sus hojas en el nivel p.

    6.2 Operaciones en rboles binarios. Se aplican varias operaciones primitivas a un rbol binario.

    Si p es un apuntador a un nodo nd de un rbol binario:

    1.La funcin info(p) regresa el contenido de nd.

    2.La funcin left(p) regresa un apuntador al hijo izquierdo de

    nd.

    3.La funcin right(p) regresa un apuntador al hijo derecho de

    nd.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    73

    4.La funcin father(p) regresa un apuntador al padre de nd.

    5.La funcin brother(p) regresa un apuntador al hermano de nd.

    6.La funcin isLeft(p) regresa true si nd es un hijo izquierdo de

    algn otro nodo en el rbol, y false en caso contrario.

    7.La funcin isRight(p) regresa true si nd es un hijo derecho de

    algn otro nodo en el rbol, y false en caso contrario.

    En la construccin de un rbol binario son tiles las

    operaciones:

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    74

    1.makeTree(x) crea un nuevo rbol que consta de un nodo

    nico con un campo de informacin x, y regresa un apuntador

    a este nodo.

    2.setLeft(p, x) crea un nuevo hijo izquierdo de node(p) con el

    campo de informacin x.

    3.setRight(p, x) crea un nuevo hijo derecho de node(p) con el

    campo de informacin x.

    6.3 Aplicaciones de rboles binarios. Un rbol binario es una estructura de datos til cuando deben

    tomarse decisiones en dos sentidos en cada punto de un proceso.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    75

    Suponga que se desea encontrar todos los duplicados de una

    lista de nmeros.

    Considrese lo siguiente:

    1.El primer nmero de la lista se coloca en un nodo que se ha

    establecido como la raz de un rbol binario con subrboles

    izquierdo y derecho vacos.

    2.Cada nmero sucesivo en la lista se compara con el nmero

    en la raz, aqu se tienen 3 casos:

    a. Si coincide, se tiene un duplicado.

    b.Si es menor, se examina el subrbol izquierdo.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    76

    c. Si es mayor, se examina el subrbol derecho.

    3.Si alguno de los subrboles esta vaco, el nmero no es un

    duplicado y se coloca en un nodo nuevo en dicha posicin del

    rbol.

    4.Si el subrbol no est vaco, se compara el nmero con la raz

    del subrbol y se repite todo el proceso con el subrbol.

    Un rbol binario de bsqueda (ABB) no tiene valores

    duplicados en los nodos y adems, tiene la caracterstica de que:

    1.Los valores en cualquier subrbol izquierdo son menores que

    el valor en su nodo padre.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    77

    2.Los valores en cualquier subrbol derecho son mayores que el

    valor en su nodo padre.

    El rbol binario de bsqueda de la Ilustracin 3 fue construido

    dada la siguiente secuencia de elementos:

    14, 15, 4, 9, 7, 18, 3, 5, 16, 4, 20, 17

    Ejercicio: realice la insercin de los elementos anteriores y

    compare su rbol con el de la Ilustracin 3.

    Una operacin comn es recorrer todo un rbol binario en un

    orden especfico.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    78

    Ilustracin 3 rbol binario de bsqueda. A la operacin de recorrer un rbol de una forma especfica y

    de numerar sus nodos, se le conoce como visitar el rbol

    (procesar el valor del nodo).

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    79

    Ejercicio: Cul es el orden natural de recorrido de una lista?

    Cul sera el orden natural de recorrido de un rbol?

    En general, se definen tres mtodos de recorrido de un rbol

    binario.

    Antes de presentarlos se debern tener en mente las siguientes

    consideraciones:

    1.No se necesita hacer nada para un rbol binario vaco.

    2.Todos los mtodos se definen recursivamente.

    3.Siempre se recorren la raz y los subrboles, la diferencia

    radica en el orden en que se visitan.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    80

    Para recorrer un rbol binario no vaco en orden previo (orden

    de primera profundidad) se ejecutan tres operaciones:

    1.Visitar la raz.

    2.Recorrer el subrbol izquierdo en orden previo.

    3.Recorrer el subrbol derecho en orden previo.

    Para recorrer un rbol binario no vaco en orden (orden

    simtrico) se ejecutan tres operaciones:

    1.Recorrer el subrbol izquierdo en orden.

    2.Visitar la raz.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    81

    3.Recorrer el subrbol derecho en orden.

    Para recorrer un rbol binario no vaco en orden posterior se

    ejecutan tres operaciones:

    1.Recorrer el subrbol izquierdo en orden posterior.

    2.Recorrer el subrbol derecho en orden posterior.

    3.Visitar la raz.

    Ejercicios a desarrollar con rboles:

    1.Ordenamiento de nmeros e identificacin de elementos

    repetidos almacenados en una lista.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    82

    2.rboles de expresiones.

    3.Determinar el nmero de nodos de un rbol binario.

    4.La suma de todos los nodos.

    5.La profundidad de un rbol binario.

    6.Determinar si un rbol binario es o no estrictamente binario.

    7.Determinar si un rbol binario es o no completo de nivel p.

    6.4 Eliminacin de un ABB. La eliminacin es el problema inverso a la insercin, sin

    embargo, las cosas no son tan sencillas como para la insercin.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    83

    Si el nodo que se pretende eliminar es un nodo hoja o un nodo

    con un solo descendiente, la eliminacin es directa.

    La dificultad radica en la eliminacin de un nodo con dos

    descendientes. En este caso, el elemento eliminado ser substituido

    por el descendiente ms a la derecha de su subrbol izquierdo (o

    bien por el descendiente ms a la izquierda de su subrbol

    derecho).

    Obsrvese que estos nodos substitutos tienen a lo ms, un

    descendiente.

    Lo anterior queda mejor representado en la Ilustracin 4.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    84

    Ilustracin 4. Eliminacin de un ABB.

  • Estructuras de Datos

    Ricardo Ruiz Rodrguez

    85

    Ejercicio: En base al proceso descrito con anterioridad, inserte

    en un ABB los nmeros: 9, 18, 10, 2, 6, 21, 8, 1, 7. Despus

    elimine los nmeros 21, 18 y 9.

    Ejercicio: Realice la implementacin de la eliminacin de

    nodos en un ABB, considere los tres casos previstos:

    1.Eliminacin de nodos hojas.

    2.Eliminacin de nodos con un solo hijo.

    3.Eliminacin de nodos con dos hijos (implemente el esquema

    de substitucin del hijo ms a la derecha del subrbol

    izquierdo).