arboles_hilados

download arboles_hilados

of 31

Transcript of arboles_hilados

  • 20/08/2014 1

    Unidad IV

    Estructuras no lineales de Datos:

    rboles Hilados

    Pro. Domingo Hernndez

  • 20/08/2014 2

    Contenido.

    1.- Introduccin.

    2.- rboles Hilados.

    3.- Recorrido en pre-orden.

    4.- Especificacin del nodo para un rbol Hilado.

    5.- Especificacin de Algoritmos.

  • 20/08/2014 3

    Estructuras no lineales: rboles hilados

    Introduccin

    Al estudiar la representacin enlazada de un rbol

    binario es fcil observar que existen muchos

    enlaces nulos.

    De hecho, existen ms enlaces nulos que punteros

    con valores reales. En concreto, para un rbol con n

    nodos, existen n+1 enlaces nulos de los 2*n

    enlaces existentes en la representacin (ms de la

    mitad).

    Como el espacio de memoria ocupado por los

    enlaces nulos es el mismo que el ocupado por los

    no nulos, podra resultar conveniente utilizar estos

    enlaces nulos para almacenar alguna informacin

    de inters para la manipulacin del rbol binario.

  • 20/08/2014 4

    Estructuras no lineales: rboles hilados

    Una forma de utilizar estos enlaces es sustituirlos por

    punteros a otros nodos del rbol (este tipo especial de

    punteros se conocen en la literatura anglosajona con el

    nombre de threads, que se podra traducir por hilos).

    En particular, los enlaces nulos situados en el subrbol

    derecho de un nodo se suelen reutilizar para apuntar al

    sucesor de ese nodo en un determinado recorrido del

    rbol, por ejemplo infijo (En Orden).

    Mientras que los enlaces nulos en subrboles

    izquierdos se utilizan para apuntar al predecesor

    del nodo en el mismo tipo de recorrido.

    Si para algn nodo no existe predecesor (porque es

    el primero en el recorrido establecido) o sucesor

    (porque es el ltimo), se mantiene con valor nulo el

    enlace correspondiente.

  • 20/08/2014 5

    Estructuras no lineales:

    Justificacin: En muchas ocaciones, existe ms

    nodos con enlaces nulos que con apuntadores,

    ocacionanado un desperdicio de memoria.

    Los rboles hilados proponen utilizar los espacios

    de memoria de los enlaces terminales

    (apuntadores= Nulos).

    Arboles hilados fueron propuesto por A. J. Perlis y

    C. Thornton

    La idea fundamental es reemplaza los enlaces

    terminales por hilos a otros nodos de rbol, de

    manera de asistir al recorrido.

    Cada rbol se hila de acuerdo al recorrido deseado.

    rboles hilados

  • 20/08/2014 6

    Estructuras no lineales: rboles hilados

  • 20/08/2014 7

    Estructuras no lineales: rboles hilados

  • 20/08/2014 8

    Estructuras no lineales: rboles hilados

    rboles Hilados Hilvanados

  • 20/08/2014 9

    Estructuras no lineales: rboles hilados

  • 20/08/2014 10

    Estructuras no lineales: rboles hilados

  • 20/08/2014 11

    Estructuras no lineales: rboles hilados

  • 20/08/2014 12

    Estructuras no lineales: rboles hilados

  • 20/08/2014 13

    Estructuras no lineales: rboles hilados

  • 20/08/2014 14

    Estructuras no lineales: rboles hilados

  • 20/08/2014 15

    Estructuras no lineales: rboles hilados

  • 20/08/2014 16

    Estructuras no lineales: rboles hilados

  • 20/08/2014 17

    Estructuras no lineales: rboles hilados

  • 20/08/2014 18

    Estructuras no lineales: rboles hilados

  • 20/08/2014 19

    Estructuras no lineales: rboles hilados

  • 20/08/2014 20

    Estructuras no lineales: rboles hilados

  • 20/08/2014 21

    Estructuras no lineales: rboles hilados

  • 20/08/2014 22

    Estructuras no lineales: rboles hilados

  • 20/08/2014 23

    Estructuras no lineales: rboles hilados

  • 20/08/2014 24

    Estructuras no lineales: rboles hilados

    void Enorden(NodoArb* a){ NodoArb p,q; if (a != 0){ p=a; do { q=null; while (p != 0) { q=p; p= pHizq(); } if (q!=0){ // escribir .... qinfor(); p=qHder(); while((qHiloder()) && (p!=0)) { pinfor(); q=p; p=pHder(); } } } while (q!= 0); } }

  • 20/08/2014 25

    Estructuras no lineales: rboles hilados

    Estructuras de datos requeridas

    Estructura de datos.

    #define HEBRA 1

    #define HIJO 0

    typedef struct tnode

    {

    int clave;

    int ndes; //nodo derecho es: Hebra o Hijo

    struct tnode *left; struct tnode *right;

    } nodo, * pnodo;

    pnodo getnodo(int dato)

    {

    pnodo p=NULL;

    if ( (p= (pnodo) malloc(sizeof(nodo))) == NULL)

    return(NULL);

    else {

    p->clave=dato;

    p->left=NULL;

    p->right=NULL;

    p->ndes=HIJO;

    }

    return(p);

    }

  • 20/08/2014 26

    Estructuras no lineales: rboles hilados

    pnodo buscar(pnodo t, int valor) /* algoritmo iterativo */

    {

    while ( t != NULL) {

    if ( t->clave == valor )

    return (t);

    else

    if (t->clave > valor)

    t = t->left;

    else

    if (t->ndes==HIJO)

    t = t->right; //asimtrico por la derecha

    else

    return (NULL);

    }

    return (t); /* NULL No lo encontr*/

    }

  • 20/08/2014 27

    Estructuras no lineales: rboles hilados

    typedef enum {left, right, vacio} modo; //modos de descenso Insertar en rbol_binario_hilado

  • 20/08/2014 28

    Estructuras no lineales: rboles hilados

  • 20/08/2014 29

    Estructuras no lineales: rboles hilados

  • 20/08/2014 30

    Estructuras no lineales: rboles hilados

  • 20/08/2014 31

    Estructuras no lineales: rboles hilados