You are on page 1of 35

La estructura de datos: rbol

NDICE DE CONTENIDOS
Concepto de rbol
Terminologa bsica
Operaciones tipicas
rboles binarios
rboles binarios
Propiedades
Operaciones del TAD
Recorridos
In-orden
Pre-orden
Post-orden



Concepto de rbol
Estructura JERRQUICA no lineal
Relaciones padre-hijo entre nodos
Ejemplos: sistema de ficheros, estructura de un
libro, diagrama de clases JAVA, diagrama
organizativo...
MiEmpresa
Ventas I+D Produccin
Porttiles Sobremesa ES Internacional
Europa Asia Amrica
Concepto de rbol
Un rbol se caracteriza por estar formado por
una serie de nodos conectados por una serie de
aristas que verifican que:

hay un nico nodo raz
cada nodo, excepto la raz, tienen un nico
padre
hay un nico camino (desde la raz hasta cada
nodo)


Terminologa bsica


A
B D C
G
H E F
I J K
Raz: nico nodo sin padre
Nodo interno: tiene al
menos un hijo
Nodo hoja (externo): no
tiene hijos
Descendiente directo:
hijo
Descendientes: hijo,
nieto...
Subrbol: rbol formado
por un nodo y sus
descendientes


subrbol
Terminologa bsica


Grado de un nodo: nmero de
descendientes directos
Grado del rbol: mayor grado de sus nodos
rbol binario: rbol de grado 2 (ningun
nodo con mas de 2 hijos)
Cada nodo tiene como mucho dos descendientes
directos
rbol multicamino: rbol de grado mayor
que 2
Cada nodo puede tener n descendientes directos
Lista= rbol degenerado de grado 1

Terminologa bsica


Profundidad de un nodo: nmero de
predecesores
Altura del rbol: profundidad mxima de
cualquier nodo


A
B D C
G H E F
I J K
profundidad(A)=0
profundidad(H)=2
altura=3
Terminologa bsica


Camino: existe un camino
del nodo X al nodo Y, si
existe una sucesin de
nodos que permitan llegar
desde X a Y.

camino(A,K)={A,B,F,K}
camino(C,K)={}




A
B D C
G H E F
I J K
Operaciones tpicas

Buscar un elemento
Dado un nodo, listar los hijos
Borrar un elemento
Eliminar un subrbol (podar )
Aadir un subrbol (injertar )
Encontrar la raz de cualquier nodo
Enumerar todos los elementos
Laboratorio DEI 2002/03 Estructura de Datos rboles - 9
rbol binario
Es un rbol de grado 2
Cada nodo tiene de 0 a 2 descendientes
directos: el hijo izquierdo y el derecho



A
B C
F G D E
H I
rbol binario
Aplicacin: expresiones aritmticas, rboles
de decisin, bsqueda (ABB)
En algunos casos se exige que el rbol sea
completo = todo nodo interno tiene dos
descendientes.


rbol binario completo rbol binario no completo
rbol binario
Ejemplo: expresiones aritmticas
nodo interno: operadores
nodos hoja: operandos

2(a-1)+3b expresion matematica
2*(a-1) + 3*b expresion computacional
+

-
2
a
1
3 b
rbol binario
Ejemplo de aplicacin: rboles de decisin
nodo interno: preguntas con respuesta si/no
nodos hoja: decisiones

Dnde cenamos?
Cmida rpida?
Con caf? Cara?
Starbucks McDonalds Zalacan VIPS
S No
S No S No
rbol binario: propiedades
Notacin
n: nmero de nodos
e: nmero de nodos hoja
i: nmero de nodos
internos
h: altura del rbol

Propiedades

e 2
h

h i 2
h
-1
log
2
(n+1)-1 h (n-1)/2
2h+1 n 2
h+1
-1

Si es completo:

eh+1
e=i+1

rbol binario: operaciones
asignarInfo(referenciaNodo, valorInformacion)
asignarIzq(referenciaNodo, valorEnlace)
asignarDer(referenciaNodo, valorEnlace

Modificacin de los nodos
info(referenciaNodo) Informacion
izq(referenciaNodo) enlace
der(referenciaNodo) enlace
eshoja(referenciaNodo) Booleano
Acceso a los nodos
recorrer(nombreArbol,tipoRecorrido)
Recorrido del rbol
buscar(nombreArbol, dato) informacion
buscar(nombreArbol, informacin)referenciaNodo
borrar(nombreArbol, valorInfo)
Borrado de nodos
insertar(padre, valorInfo, posicion)

arbolVacio(nombreArbol) Booleano

Comprobacin del estado
crearArbol (nombreArbol)
Creacin de un rbol
Insercin de nodos
Bsqueda de un nodo
rbol binario: recorridos
Hay tres tipos de recorrido en un rbol
binario

in-Orden

pre-Orden

post-Orden


rbol binario: recorridos
Recorrido IN-ORDEN
cada nodo se visita tras visitar su subrbol
izquierdo y antes de visitar el derecho
(izq, raiz, der)

Ejemplo:


h
i
e
m
a
in-orden: (i, e, h, a, m)
rbol binario: recorridos
Recorrido PRE-ORDEN
cada nodo se visita antes de visitar su subrbol
izquierdo y antes de visitar el derecho
(raiz, izq, der)

Ejemplo:


h
i
e
m
a
in-orden: (h, i, e, m, a)
rbol binario: recorridos
Recorrido POST-ORDEN
cada nodo se visita despus de visitar su subrbol
izquierdo y despus de visitar el derecho
(izq, der, raiz)

Ejemplo:


h
i
e
m
a
post-orden: (e, i, a, m, h)
rbol binario: recorridos
Procesamiento de Expresiones
Una manera de procesar expresiones
aritmticas en un computador es usando un
rbol de expresiones.
Definicin:
Un rbol de expresin es un rbol binario compuesto
por nodos que contienen dos tipos de objetos:
operadores y valores terminales.

Tipos de rboles binarios
Arboles binarios equilibrados:
|Altura subrbol izquierda altura subrbol derecha |<1

Arboles binarios Completo:
2 hijos cada nodo interno y en el mismo nivel

Heap (montculo) son los que mantienen cierto
orden:
Valor de un nodo es menor o igual al de su padre

Tipos de rboles
binarios
Laboratorio DEI 2002/03 Estructura de Datos rboles - 22
rbol binario no equilibrado
head
Tipos de rboles binarios
Laboratorio DEI 2002/03 Estructura de Datos rboles - 23
Ejemplo de recorrido de AB
Ejemplo: Recorridos en las expresiones
aritmticas
pre-orden: notacin prefija (polaca)
in-orden: notacin normal (sin parntesis)
post-orden: notacin polaca inversa
+

-
2
a 1
3 b
pre-orden: + x 2 - a 1 x 3 b
in-orden: 2 x a - 1 + 3 x b
post-orden: 2 a 1 - x 3 b x +


A
E
B
H F
C
D
G
Inorden; (HGBADCEF)

Preorden: (ABGHCDEF)

Postorden: (HGBDFECA)
Numero nodos =8;
Nodo Raz = A
Nodos terminales = H-F-D
Numero niveles = 4
Camino(A,H)={A,B,G,H}
camino(C,G)={}

profundidad(A)=0
profundidad(G)=2
altura=3

Ejemplo 1.
Nodo Grado
A 2
B 1
C 2
D 0
E 1
F 0
G 1
H 0
-
+
*
/
/
9
Z *
*
* 5
X
Y
S T 3 Z
Inorden: 9/Z+5*T/3*Z-5*X*Y
Preorden: +/9Z/*5T*3Z*5*XY
Postorden: 9Z/5T*3Z*/5XY**-
Ejercicio de ejemplo:

Dada la siguiente expresin matemtica 9/Z+5T/3Z-5XY Represntela en
un rbol binario y obtenga sus recorridos.
Ejercicios :

Dadas las siguientes expresiones matemticas
a) (4(X^2)/Y+(3+5Y)/3X)^2 (^ elevado)

b) 2X+5Y-4Z+Z-P/4

Represntelas en un rbol binario y obtenga sus
recorridos.
Arreglos en forma en forma esttica
Sea L un arreglo lineal, en
la cual cada entrada L[i]
constituya un apuntador o
un cursor al padre del
nodo I.
La raz de A se distingue
como un apuntador a
nulo.

1
2
4
3
5 9
6 7 8
10
1 2 3 4 5 6 7 8 9 10
A 0 1 1 2 2 5 5 5 3 3
Representacin de
rbol no binario
struct nodo{
int padre;
int info;
int izq;
Int der;
};
nodo arbol[20]; // rbol
int head;
Declaracin estructura de un rbol.
( asignacin esttica de memoria uso Arreglos)
La variable Head indica la direccin de la raz del rbol
struct nodo{
nodo *padre;
int info;
nodo *izq;
nodo *der;
};
nodo *nuevo,*head,*ptr,*anterior;
Declaracin estructura de un rbol.
( asignacin dinmica de memoria uso punteros)
Punteros *nuevo, *ptr, *anterior son necesarios para el
uso de procedimiento para trabajar con rbol en el
programa que se muestra a continuacin.
void ingresadatos()
{
clrscr();
printf("ingreso de informacin al nodo \n");
printf("\n Numero: ");
scanf("%d",&dato);
}
Funcin que recibe valor entero y lo guarda en
variable dato
// son variables que usaremos para ingresar datos
int clavenueva;
int dato,op
Mdulos de programa para ingresar datos y
recorrer un rbol binario (con uso puntero)
void ingresar()
{
nuevo=new nodo;
nuevo->izq=NULL;
nuevo->der=NULL;
nuevo->info=dato;
clavenueva=dato;
/* busca lugar insercion */
ptr=head;
anterior=NULL;
while (ptr!=NULL)
{
anterior=ptr;
if (ptr->info>clavenueva)
ptr=ptr->izq;
else
ptr=ptr->der;
};
Funcin que permite ingresar un nodo al rbol.
if (anterior==NULL){
printf("\n Se crea el arbol con nodo raiz\n");
nuevo->padre=NULL;
head=nuevo;}
else
if (anterior->info > clavenueva){
anterior->izq=nuevo;nuevo->padre=anterior;}
else
{anterior->der=nuevo;nuevo->padre=anterior;}
}
void inorden(nodo *tree)
{
if (tree!=NULL){
inorden(tree->izq);
printf("\n dir= %d izq:%d infor:%d der: %d",tree,tree->izq,tree-
>info,tree->der);
inorden(tree->der);
}
}
void preorden(nodo *tree)
{
if (tree!=NULL){
printf("\n dir= %d izq:%d infor:%d der: %d",tree,tree->izq,tree-
>info,tree->der);
preorden(tree->izq);
preorden(tree->der);
}
}
Funciones de Recorridos
void postorden(nodo *tree)
{
if (tree!=NULL){
postorden(tree->izq);
postorden(tree->der);
printf("\n dir= %d izq:%d infor:%d der: %d",tree,tree-
>izq,tree->info,tree->der);
}
}
void main()
{
do {
clrscr();
//printf("1. crear el arbol\n");
printf("1. Ingresar nodo al arbol\n");
printf("2. Buscar en Inorden\n");
printf("3. Buscar en Preorden\n");
printf("4. Buscar en Postorden\n");
printf("0. Fin\n");
printf("\n");
printf("Ingresa Opcin: ");
scanf("%d",&op);
switch(op)
{
//case 1:{crear(); break;}
case 1:{ingresadatos();ingresar(); break;}
case 2:{inorden(head);getch(); break;}
case 3:{preorden(head);getch(); break;}
case 4:{postorden(head);getch(); break;}
}
}
while(op!=0);
}
Modulo
principal, de
llamadas a la
funcin de
insertar nodo
y a las
funciones de
recorridos.

You might also like