Está en la página 1de 31

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<T>* a){
NodoArb<T> 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

También podría gustarte