- PowerPoint PPT Presentation

About This Presentation
Title:

Description:

rboles Eliminar los nodos de un rbol binario Esta operaci n libera todos los nodos del rbol; se visita cada uno de los nodos para borrar el nodo con la ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 52
Provided by: interc2
Category:
Tags: binario | como | escribir

less

Transcript and Presenter's Notes

Title:


1
Árboles
2
Arboles
  • Un árbol es una estructura de datos no lineal
    formada por un conjunto de nodos.
  • Son estructuras jerárquicas, cada elemento puede
    tener diferentes siguientes elementos.
  • El concepto de árbol implica una estructura en la
    que los datos se organizan de modo que los
    elementos de información están relacionados entre
    sí a través de ramas

3
Arboles
  • Un árbol esta compuesto por un conjunto finito de
    elementos, llamados nodos y un conjunto finito
    ramas , que conectan a los nodos.
  • En un árbol existe un nodo especial llamado raíz.
    Así mismo, un nodo del que sale una rama, recibe
    el nombre de nodo de bifurcación o nodo rama y un
    nodo que no tiene ramas se le llama nodo hoja

4
(No Transcript)
5
  • Como se aprecia en la figura cada nodo de un
    árbol es la raíz de algún subárbol contenido en
    el. El número de ramas de un nodo recibe el
    nombre de grado del nodo.
  • El nivel de un nodo respecto al nodo raíz se
    define diciendo que la raíz tiene el nivel 0
    cualquier otro nodo tiene un nivel igual a la
    distancia de ese nodo al nodo raíz. El máximo de
    los nivele se denomina altura del árbol.
  • Es útil limitar los arboles en el sentido de que
    cada nodo sea a lo sumo de grado 2. De esta forma
    cabe distinguir entre subárbol izquierdo y
    subárbol derecho de un nodo. Los arboles así
    formados, se les llama arboles binarios.

6
  • Un árbol binario es un árbol en el que ningún
    nodo puede tener más de dos subárboles. En un
    árbol binario cada nodo puede tener cero, uno o
    dos hijos (subárboles). Se conoce el nodo de la
    izquierda como hijo izquierdo y el nodo de la
    derecha como hijo derecho.

7
  • Un árbol binario es una estructura recursiva,
    existe un nodo denominado raíz. Cada nodo es la
    raíz de su propio subárbol y tiene 0, 1 o 2
    hijos, que son raíces de árboles llamados
    subárboles derecho e izquierdo del nodo
    respectivamente. Un árbol binario se divide en
    tres subconjuntos disjuntos
  • R Nodo raíz
  • I1, I2, In Subárbol izquierdo de R
  • D1, D2, Dn Subárbol derecho de R

8
Imagen de un árbol binario
9
  • En cualquier nivel n, un árbol binario puede
    contener de 1 a 2n nodos. El número de nodos por
    nivel contribuye a la densidad del árbol.
  • En la siguiente figura, el árbol de raíz A
    contiene 8 nodos en una profundidad de 4,
    mientras que el árbol (B) contiene 5 nodos y una
    profundidad 5. Este último caso es una forma
    especial, denominada árbol degenerado, en el que
    existe un solo nodo hoja y cada nodo no hoja
    sólo tiene un hijo. Un árbol degenerado es
    equivalente a una lista enlazada.

10
  • La distancia de un nodo a la raíz determina la
    eficiencia con la que ser localizado. Por
    ejemplo, dado cualquier nodo de un nodo árbol, a
    sus hijos se puede acceder siguiendo sólo un
    camino de bifurcación o de ramas, el que conduce
    al nodo deseado. De modo similar, los nodos a
    nivel 2 de un árbol sólo pueden ser accedidos
    siguiendo un camino de sólo dos ramas del árbol.
  • La característica anterior nos conduce a una
    característica muy importante de un árbol
    binario, su balance o equilibrio. Para determinar
    si un árbol está equilibrado, se calcula su
    factor de equilibrio. El factor de equilibrio de
    un árbol binario es la diferencia en altura entre
    los subárboles derecho e izquierdo. Si so define
    la altura del subárbol izquierdo como HI y la
    altura del subárbol derecho como HD, entonces el
    factor de equilibrio del árbol B, se determina
    por la siguiente fórmula B HD -HI

11
  • Utilizando esta fórmula el equilibrio del nodo
    raíz los dos árboles de la figura anterior, (A)
    -1 y (B) 4.
  • Un árbol está perfectamente equilibrado si su
    equilibrio o balance es cero y sus subárboles son
    también perfectamente equilibrados. Dado que esta
    definición ocurre raramente se aplica una
    definición alternativa. Un árbol binario está
    equilibrado si la altura de sus árboles difiere
    en no más de uno (su factor de equilibrio es -1,
    0, 1) y sus subárboles son también equilibrados.
  • Un árbol binario está equilibrado si para cada
    nodo del árbol la diferencia entre la altura de
    la rama derecha y, rama izquierda es menor o
    igual que 1 (en valor absoluto).

12
  • Un árbol binario completo de profundidad n es un
    árbol en el que para cada nivel, del 0 al nivel
    n-1, tienen un conjunto lleno de nodos y todos
    los nodos hija a nivel n ocupan las posiciones
    más a la izquierda del árbol.
  • Un árbol binario, de profundidad n, completo que
    contiene 2n nodos a nivel n es un árbol lleno. Un
    árbol lleno es un árbol binario que tiene el
    máximo número de entradas para su altura. Esto
    sucede cuando el último nivel está lleno. La
    figura A muestra un árbol binario completo el
    árbol de la figura B corresponde con uno lleno.

13
  • El último caso de árbol es un tipo especial
    denominado árbol degenerado en el que hay un solo
    nodo hoja (E) y cada nodo no hoja sólo tiene un
    hijo. Un árbol degenerado es equivalente a una
    lista enlazada.
  • Los árboles binarios y llenos de profundidad k1
    proporcionan algunos datos matemáticos que es
    necesario comentar. En cada caso, existe un nodo
    al nivel 0 (raíz), dos nodos (21) a nivel 1,
    cuatro nodos (22) a nivel 2, etc. Se puede
    demostrar que a través de los primeros k niveles
    (del nivel 0 al nivel k-1) hay 2k -1 nodos,
    considerando la suma de la progresión geométrica
    de razón 2
  • 1 2 4 . . . 2k-1 2k -1

14
  • A nivel k, el número de nodos adicionados para un
    árbol completo está en el rango de un mínimo de 1
    a un máximo de 2k (lleno). Con un árbol lleno,
    el número de nodos es
  • 1 2 4 . . . 2k-1 2k1 -1
  • El número de nodos n en un árbol binario completo
    de profundidad k1 (del nivel 0 al nivel k)
    cumple la inigualdad
  • 2k lt n lt 2k1 -1 lt 2k1
  • Aplicando logaritmos a la desigualdad anterior
  • k lt log2 (n) lt k 1

15
  • Se deduce que la altura o profundidad de un árbol
    binario completo de n nodos es
  • H Log2 n 1 (parte de Log2 n 1
  • Por ejemplo, un árbol lleno de profundidad 4
    (niveles 0 a 3) tiene 24 -1 15 nodos.

16
  • Existen otros conceptos que definen las
    características del árbol, en relación a su
    tamaño
  • Orden es el número potencial de hijos que puede
    tener cada elemento de árbol. De este modo,
    diremos que un árbol en el que cada nodo puede
    apuntar a otros dos es de orden dos, si puede
    apuntar a tres será de orden tres, etc.
  • Grado el número de hijos que tiene el elemento
    con más hijos dentro del árbol.

17
  • Nivel se define para cada elemento del árbol
    como la distancia a la raíz, medida en nodos. El
    nivel de la raíz es cero y el de sus hijos uno.
    Así sucesivamente.
  • Altura la altura de un árbol se define como el
    nivel del nodo de mayor nivel. Como cada nodo de
    un árbol puede considerarse a su vez como la raíz
    de un árbol, también podemos hablar de altura de
    ramas.

18
Estructura de un Árbol Binario
  • La estructura de un árbol binario se construye
    con nodos. Cada nodo debe contener el campo dato
    (datos a almacenar) y dos campos apuntador, uno
    al subárbol izquierdo y otro al subárbol derecho,
    que se conocen como puntero izquierdo (izquierdo,
    izdo.) y apuntador derecho (derecho, dcho.)
    respectivamente. Un valor NULL indica un árbol
    vacío.

19
  • El algoritmo correspondiente a la estructura de
    un árbol es el siguiente
  • Nodo
  • subarbolIzquierdo ltapuntador a Nodogt
  • datos ltTipodatogt
  • subarbolDerecho ltapuntador a Nodogt
  • Fin Nodo

20
  • La figura muestra un árbol binario y su
    estructura en nodos

21
Diferentes tipos de representaciones en C
  • Los nodos pueden ser representados con la
    construcción de struct. Suponiendo que el nodo
    tiene tres campos Datos, Izquierdo (apuntador
    subárbol izquierdo) y Derecho (apuntador a
    subárbol derecho)
  • Representación 1
  • typedef struct nodo puntero_arbol
  • struct nodo
  • int datos
  • puntero_arbol hijoIzdo, hijoDcho

22
  • Representación 2
  • typedef int TipoElemento es el tipo de los
    datos puede ser cualquier tipo ya definido.
  • struct
  • TipoElemento dato
  • struct Nodo izdo, dcho
  • typedef struct Nodo ElementoDeArbolBin
  • typedef ElementoDeArbolBin ArbolBinario

23
  • Creación de un Árbol Binario
  • A partir del nodo raíz de un árbol se puede
    acceder a los demás nodos del árbol por ello el
    apuntador que permite acceder al árbol es el que
    referencia al raíz. La rama izquierda y derecha
    son a su vez árboles binarios que tienen su raíz,
    y así recursivamente hasta llegar a las hojas del
    árbol.
  • La formación del árbol pasa por la creación de
    cada uno de los nodos y el enlace con el
    correspondiente nodo padre. Para crear un nodo de
    un árbol binario, se reserva memoria para el
    nodo, se asigna el dato al campo de datos y se
    inicializa los punteros izdo y dcho a NULL.

24
  • ArbolBinario crearNodo (TipoElemento x)
  • ArbolBinario a
  • a (ArbolBinario) malloc (sizeof(Nodo))
  • a -gt dato x
  • a -gt dcho a -gt izdo NULL
  • return a
  • La función nuevoArbol ( ) crea un árbol cuya
    raíz es un nodo nuevo que tiene como campo dato
    el pasado como tercer argumento. A su vez, la
    rama izquierda y derecha del árbol se pasan como
    segundo y cuarto argumento.

25
  • void nuevoArbol (ArbolBinario raíz, ArbolBinario
    ramaIzqda, TipoElementos x, ArbolBinario
    ramaDrcha)
  • raíz crearNodo(x)
  • (raiz) -gt izdo ramaIzda
  • (raiz) -gt dcho ramaDrcha
  • Como ejemplo se crea, a continuación un árbol
    binario de cadenas de caracteres, siguiendo un
    esquema secuencial y utilizando la estructura
    auxiliar Pila

26
  • ArbolBinario raiz, al, a2
  • Pila pila
  • nuevoArbol(al, NULL, "Maria", NULL)
  • nuevoArbol(a2, NULL, "Rodrigo", NULL)
  • nuevoArbol(raiz, al, "Esperanza", a2)
  • insertar(pila, raiz)
  • nuevoArbol(al, NULL, "Anyora", NULL)
  • nuevoArbol (a2, NULL, "Abel" ,NULL)
  • nuevoArbol (raiz, al', "M Jesus", a2)
  • insertar(pila, raiz)
  • a2 quitar(pila)
  • al quitar(pila)
  • nuevoArbol (raiz, al, "Esperanza", a2)

27
(No Transcript)
28
  • Operaciones en Árboles Binarios
  • Una vez que se tiene creado un árbol binario, se
    pueden realizar diversas operaciones sobre el. El
    hacer uso de una operación u otra dependerá de la
    aplicación que se le quiera dar al árbol. Algunas
    de las operaciones típicas que se realizan en
    árboles binarios son las siguientes
  • Determinar su altura.
  • Determinar su número de elementos.
  • Determinar el número de nodos hoja.
  • Hacer una copia.
  • Visualizar el árbol binario en pantalla o en
    impresora.
  • Determinar si dos árboles binarios son
    idénticos.
  • Borrar (eliminar el árbol).
  • Si es un árbol de expresión", evaluar la
    expresión.
  • Si es un árbol de expresión, obtener la forma
    de paréntesis de la expresión.

29
  •  
  • Todas estas operaciones se pueden realizar
    recorriendo el árbol binario de un modo
    sistemático. El recorrido de un árbol es la
    operación de vista al árbol, o lo que es lo
    mismo, la visita a cada nodo del árbol una vez y
    sólo una. El recorrido de un árbol es necesario
    en muchas ocasiones, por ejemplo si se desea
    imprimir la información contenida en cada nodo.
    Existen diferentes formas de visitar o recorrer
    un árbol.

30
  • Profundidad y altura de un árbol binario
  •  
  • La profundidad de un árbol binario es una
    característica que se necesita conocer con
    frecuencia durante el desarrollo de una
    aplicación con árboles. La función profundidad (
    ) determina la profundidad de un árbol binario.
    Para ello tiene un parámetro que es un apuntador
    a la raíz del árbol.
  • El caso más sencillo de cálculo de la profundidad
    es cuando el árbol está vacío (raiz NULL, o
    bien, ! raiz) en cuyo caso la profundidad es 0.
    Si el árbol no está vacío, cada subárbol debe
    tener su propia profundidad, por lo que se
    necesita evaluar cada una por separado. Las
    variables profundidadI, profundidadD almacenan
    las profundidades de los subárboles izquierdo y
    derecho respectivamente.

31
  • La altura es un concepto similar al de
    profundidad de un árbol. Un árbol que tiene nodo
    raíz, se considera que su altura es 1, la altura
    del árbol
  • es 2, y la altura del árbol

32
  • Función que determina la altura de un árbol
    binario de manera recursiva.
  • Se considera que la altura de un árbol vacío es
    0 si no está vacío, la altura es 1 máximo
    entre las alturas de rama izquierda y derecha.
  • int altura(ArbolBinario r)
  • if (r NULL)
  • return 0
  • else
  • return (1 max(altura(r-gtizdo),
    altura(r-gtdcho)))

33
  • Número de hojas de un árbol binario
  • En muchas aplicaciones se desea explorar
    (recorrer) los nodos de un árbol pero sin tener
    en cuenta un orden de recorrido preestablecido.
    En esos casos, el cliente o usuario es libre para
    utilizar el algoritmo oportuno. La operación que
    determina el número de nodos que no tienen
    descendientes visita cada nodo del árbol
    comprobando si tiene descendientes, es decir, si
    es un nodo hoja. A continuación se implementa la
    operación con la función contarhojas () el nodo
    es hoja si tanto su rama izquierda como derecha
    están a NULL, para visitar cada uno de los nodos
    se utiliza el recorrido en preorden.
  • void contarhojas(ArbolBinario r, int nh)
  • if (r ! NULL) contarhojas(r -gt izdo, nh)
  • contarhojas(r -gt dcho, nh) / procesar raíz
    determinar si es hoja /
  • if (r-gtizdo NULL r-gtdchoaNULL) (nh)

34
  • Eliminar los nodos de un árbol binario
  • Esta operación libera todos los nodos del árbol
    se visita cada uno de los nodos para borrar el
    nodo con la función free( ).El recorrido del
    árbol se hace de tal forma que asegura la
    liberación de la memoria ocupada por un nodo
    después de haber liberado su rama izquierda y
    derecha. La siguiente función implementa esta
    operación, antes de liberar el nodo se escribe el
    dato (se supone de tipo entero).
  • void eliminarbol(ArbolBinario r)
  • if (r ! NULL)
  • eliminarbol(r -gt izdo)
  • eliminarbol (r -gt dcho)
  • printf ("\tNodo borrado d ",r -gt dato)
  • free(r)

35
  • Árboles de Expresión
  • Es una secuencia de tokens (componentes de
    léxicos que siguen unas reglas establecidas). Un
    token puede ser o bien un operando o bien un
    operador.
  • La figura representa la expresión infija a (b
    c ) d junto a su árbol de expresión. El nombre
    de infija es debido a que los operadores se
    sitúan entre los operandos. En una primera
    observación vemos que los paréntesis de la
    expresión no aparecen en el árbol y esto resulta
    muy interesante para la evaluación de la
    expresión.
  • Un árbol de expresión es un árbol binario con las
    siguientes propiedades
  • Cada hoja es un operando.
  • Los nodos raíz y nodos internos son operadores.
  • Los subárboles son subexpresiones en las que el
    nodo raíz es un operador.

36
  • Árboles de Expresión
  • Es una secuencia de tokens (componentes de
    léxicos que siguen unas reglas establecidas). Un
    token puede ser o bien un operando o bien un
    operador.
  • La figura representa la expresión infija a (b
    c ) d junto a su árbol de expresión. El nombre
    de infija es debido a que los operadores se
    sitúan entre los operandos. En una primera
    observación vemos que los paréntesis de la
    expresión no aparecen en el árbol y esto resulta
    muy interesante para la evaluación de la
    expresión.
  • Un árbol de expresión es un árbol binario con las
    siguientes propiedades
  • Cada hoja es un operando.
  • Los nodos raíz y nodos internos son operadores.
  • Los subárboles son subexpresiones en las que el
    nodo raíz es un operador.

37
  • Los árboles binarios se utilizan para representar
    expresiones en memoria esencialmente, en
    compiladores de lenguajes de programación. Se
    muestra el árbol binario de expresión de (a b)
    c.

38
  • Obsérvese que los paréntesis no se almacenan en
    el árbol pero están implicados en la forma del
    árbol. Si se supone que todos los operadores
    tienen dos operandos, se puede representar una
    expresión con un árbol binario cuya raíz contiene
    un operador y cuyos subárboles izquierdo y
    derecho son los operando s izquierdo y derecho
    respectivamente. Cada operando puede ser una
    letra (x, y, a, b, etc.) o una subexpresión
    representada como un subárbol. En la figura se
    puede ver cómo el operador que está en la raíz es
    , su subárbol izquierdo representa la
    subexpresión (x y) y su subárbol derecho
    representa la subexpresión (a - b). El nodo raíz
    delsubárbol izquierdo contiene el operador () de
    la subexpresión izquierda y el nodo raíz del
    subárbol derecho contiene el operador (-) de la
    subexpresión derecha. Todos los operando s letras
    se almacenan en nodos hojas.

Árbol de expresión (x y) (a - b).
39
  • Reglas para la Construcción de Árboles de
    Expresión
  • Los árboles de expresiones se utilizan en las
    computadoras para evaluar expresiones usadas en
    programas. El algoritmo más sencillo para
    construir un árbol de expresión es aquel que lee
    una expresión completa que contiene paréntesis en
    la misma. Una expresión con paréntesis es aquella
    en que
  • La prioridad se determina sólo por paréntesis.
  • La expresión completa se sitúa entre paréntesis.
  • A fin de ver la prioridad en las expresiones,
    considérese la expresión, a c e I g - (b
    d)
  •   Los operadores con prioridad más alta son y
    / es decir,
  • (a c) (e I g) - (b d)
  •   Los operadores que siguen en orden de prioridad
    son y -, que se evalúan de izquierda a derecha.
    Por consiguiente, se puede escribir, ((a c)
    (e I g)) - (b d)
  •   Por último la expresión completa entre
    paréntesis será,
  • (((ac) (e/g)) - (bd))

40
  • El algoritmo para la construcción de un árbol de
    expresión se expresa en los siguientes pasos
  • La primera vez que se encuentra un paréntesis a
    izquierda, crea un nodo y lo hace en el nodo
    raíz. Se llama a éste, el nodo actual y se sitúa
    su puntero en una pila.
  • Cada vez que se encuentre un nuevo paréntesis a
    izquierda, crear un nuevo nodo. Si el nodo actual
    no tiene un hijo izquierdo, hacer al nuevo nodo
    el hijo izquierdo en caso contrario, hacerle el
    hijo derecho. Hacer el nuevo nodo el nodo actual
    y situar su puntero en la pila.
  • Cuando se encuentra un operando, crear un nuevo
    nodo y asignar el operando a su campo de datos.
    Si el nodo actual no tiene un hijo izquierdo,
    hacer al nuevo nodo el hijo izquierdo en caso
    contrario, hacerle el hijo derecho.
  • Cuando se encuentra un operador, sacar un puntero
    de la pila y situar el operador en el campo datos
    del nodo del puntero.
  • Ignorar paréntesis derecho y blancos.

41
  • Recorrido de un árbol
  • Para visualizar o consultar los datos
    almacenados en un árbol se necesita recorrer el
    árbol o visitar los nodos del mismo. Al contrario
    que las listas enlazadas, los árboles binarios no
    tienen realmente un primer valor, un segundo
    valor, tercer valor, etc. Se puede afirmar que el
    raíz viene el primero, pero quién viene a
    continuación? Existen diferentes métodos de
    recorrido de árbol ya que la mayoría de las
    aplicaciones binarias son bastante sensibles al
    orden en el que se visitan los nodos, de forma
    que será preciso elegir cuidadosamente el tipo de
    recorrido.
  •  
  • Un recorrido de un árbol binario requiere que
    cada nodo del árbol sea procesado (visitado) una
    vez y sólo una en una secuencia predeterminada.
    Existen dos enfoques generales para la secuencia
    de recorrido, profundidad y anchura.

42
  • En el recorrido en profundidad, el proceso exige
    un camino desde el raíz a través de un hijo, al
    descendiente más lejano del primer hijo antes de
    proseguir a un segundo hijo. En otras palabras,
    en el recorrido en profundidad, todos los
    descendientes de un hijo se procesan antes del
    siguiente hijo.
  • En el recorrido en anchura, el proceso se
    realiza horizontalmente desde el raíz a todos sus
    hijos, a continuación a los hijos de sus hijos y
    así sucesivamente hasta que todos los nodos han
    sido procesados. En otras palabras, en el
    recorrido en anchura, cada nivel se procesa
    totalmente antes de que comience el siguiente
    nivel. Dado un árbol binario que consta de un
    raíz, un subárbol izquierdo y un subárbol derecho
    se pueden definir tres tipos de secuencia de
    recorrido en profundidad.
  •  

43
(No Transcript)
44
  • Recorrido en Preorden
  • El recorrido preorden2 (NID) conlleva los
    siguientes pasos, en los que el raíz va antes que
    los subárboles
  • Recorrer el raíz (N)
  • Recorrer el subárbol izquierdo (I) en preorden.
  • Recorrer el subárbol derecho (D) en preorden.
  •   Regla( En el recorrido preorder el raíz se
    procesa antes que-los subárboles izquierdo
    y derecho.) 
  • Dado las características recursivas de los
    árboles y la definición recursiva del recorrido,
    el algoritmo tiene naturaleza recursiva. Primero,
    se procesa la raíz, a continuación el subárbol
    izquierdo y a continuación el subárbol derecho.
    Para procesar el subárbol izquierdo, se hace una
    llamada recursiva al recorrido preorden y luego
    se hace lo mismo con el subárbol derecho.

45
  • Recorrido en Inorder (orden)
  • El recorrido en orden (inorder) procesa primero
    el subárbol izquierdo, después el raíz y a
    continuación el subárbol derecho. El significado
    de in es que la raíz se procesa entre los
    subárboles.
  • Si el árbol no está vacío, el método implica los
    siguientes pasos
  • Recorrer el subárbol izquierdo ,(I)en inorden.
  • Visitar el nodo raíz (N).
  • Recorrer el subárbol derecho (D) en inorden.
  • En el árbol de la figura siguiente, los nodos se
    han numerado en el orden en que son visitados
    durante el recorrido enorden. El primer subárbol
    recorrido es el subárbol izquierdo del nodo raíz
    (árbol cuyo nodo contiene la letra El). Este
    subárbol consta de los nodos B,D y E, es a su vez
    otro árbol con el nodo B como raíz, por lo que
    siguiendo el orden IND, se visita primero D, a
    continuación B (nodo raíz) y por último E
    (derecha). Después de la visita a este subárbol
    izquierdo se visita el nodo raíz A y por último
    se visita el subárbol derecho que consta de los
    nodos C,F y G.A continuación, siguiendo el orden
    IND para el subárbol derecho, se visita primero
    F, después C (nodo raíz) y por último G.

46
Entonces el orden del recorrido inorden del árbol
de la figura, es D-B-E-A-F-C-G.
47
  • Recorrido en Postorden
  • El recorrido postorden (IDN) procesa el nodo raíz
    (post) después de que los subárboles izquierdo y
    derecho se han procesado. Se comienza situándose
    en la hoja más a la izquierda y se procesa. A
    continuación se procesa su subárbol derecho. Por
    último se procesa el nodo raíz. Las etapas del
    algoritmo son
  • Recorrer el subárbol izquierdo (I) en postorden.
  • Recorrer el subárbol derecho (D) en postorden.
  • Visitar el nodo raíz (N)
  • Recorriendo en postorden el árbol de la figura
    siguiente se visita primero el subárbol izquierdo
    de A. Este subárbol consta de los nodos B,D y E
    siguiendo el orden IDN, se visitará primero
    D(izquierdo), luego E (derecho) y por último
    B(nodo). A continuación, se visita el subárbol
    derecho de A que consta de los nodos e, F y G.
    Siguiendo el orden ION para este árbol, se visita
    primero F (izquierdo), después G(derecho) y por
    último e (nodo). Finalmente se visita el nodo
    raíz A.

48
La secuencia de nodos que determina el recorrido
en postorden del árbol de la figura , es
D-E-B-F-G-C-A.
49
  • Árbol Binario de Búsqueda
  • Los árboles binarios ordenados se disponen
    siguiendo un cierto orden, respecto de un campo
    clave, de tal forma que para cualquier subárbol,
    los nadas de la rama izquierda son menores que el
    raíz, y los nadas de la rama derecha son mayores
    que el raíz. Los elementos de un árbol ordenado
    pueden ser eficazmente localizados, se utiliza un
    algoritmo de búsqueda binaria similar al empleado
    en arrays.
  • Un árbol binario de búsqueda es aquel en el que
    dado un nodo, todos los datos del subárbol
    izquierdo son menores que el dato de ese
    nodo-mientras que todos los datos del subárbol
    derecho son mayores que el dato del nodo.

50
  • Creación de un Árbol Binario de Búsqueda
  • El árbol binario de búsqueda se construye
    teniendo en cuenta las siguientes premisas
  • El primer elemento se utiliza para crear el nodo
    raíz del árbol.
  • Los valores que guarda cada nodo del árbol deben
    ser tales que pueda existir un orden. Es decir,
    debe existir un campo (entero, real, carácter,
    cadena) respecto del cual.se establece el orden
    del árbol.
  • En cualquier nodo todos los valores del subárbol
    izquierdo del nodo son menores al valor del nodo.
    De modo similar, todos los valores del subárbol
    derecha deben ser mayores que los valores del
    nodo.
  • Con estas condiciones es sencillo probar que el
    recorrido inorden del árbol produce una secuencia
    de valores en orden ascendente. Por ejemplo, en
    la siguiente figura se muestra un árbol de
    búsqueda de caracteres, los tres tipos de
    recorrido para el árbol

51
inorden C E F G N P R T preorden N E C G F P T
R postorden C F G E R T P N
Write a Comment
User Comments (0)
About PowerShow.com