You are on page 1of 13

rbol: definicin

rbol (del latn arbor oris):


Planta perenne, de tronco leoso y elevado, que se
ramifica a cierta altura del suelo.
(otras, ver Real Academia Espaola)
rboles binarios

Franco Guidi Polanco


Escuela de Ingeniera Industrial
Pontificia Universidad Catlica de Valparaso, Chile
fguidi@ucv.cl

Actualizacin: 13 de mayo de 2005


Franco Guidi Polanco 2

rbol: definicin (cont.) rbol: definicin (cont.)

rbol: rbol:
Grafo conexo, no orientado y acclico. Una estructura de datos accesada desde un nodo raz.
Cada nodo es ya sea una hoja o un nodo interno. Un
nodo interno tiene uno o ms nodos hijos, y se le llama
padre de sus nodos hijos.
C
A E Un rbol es, ya sea:
un conjunto vaco, o
B una raz con cero
D o ms rboles
H

Franco Guidi Polanco 3 Franco Guidi Polanco 4


Hojas y nodos internos Representacin de un rbol

Una hoja es cualquier nodo que tiene sus hijos a


raz

vacos.
Un nodo interno es cualquier nodo con al menos
subrbol
un hijo no vaco.
b c d e
a Nodos internos

b c f g h i j subrbol
k

d e f l m subrbol

Hojas g h subrbol

Franco Guidi Polanco 5 Franco Guidi Polanco 6

Representacin de un rbol (cont.) Nodos padres e hijos

a Las races de los subrboles de un rbol son hijos


de la raz del rbol.
Existe un arco desde cada nodo a cada uno de sus
hijos, y se dice que este nodo es padre de sus
b c d hijos.
e

f g h i j k

l m subrbol de nodo e
subrboles de
nodo b subrboles de
nodo c
Franco Guidi Polanco 7 Franco Guidi Polanco 8
Ruta y largo de una ruta Ancestros y descendientes

Si n1, n2,... nk es una secuencia de nodos en un Si existe una ruta desde un nodo A a un nodo B,
rbol, de modo que ni es padre de ni + 1, para entonces A es ancestro de B y B es
1<=i<=k, entonces esta secuencia se llama ruta descendiente de A.
desde n1 a nk. Luego, todos los nodos de un rbol son
El largo de esta ruta es k. descendientes de la raz del rbol, mientras que la
raz es el ancestro de todos los nodos.
a n1

b c n2

d e f
n3
g h
Franco Guidi Polanco 9 Franco Guidi Polanco 10

Altura Niveles

La altura de un nodo M de un rbol corresponde Todos los nodos de altura d estn en el nivel d en
al nmero de nodos en la ruta desde la raz hasta el rbol.
M. La raz est en el nivel 1, y su altura es 1.
La altura de un rbol corresponde a la altura del
nodo ms profundo.
Nivel 1 a
a Nivel 2 b c
Altura del
b c nodo=2
Altura del rbol=4 Nivel 3 d e f
d e f
Nivel 4 g h
g h
Franco Guidi Polanco 11 Franco Guidi Polanco 12
rboles binarios Representacin de un rbol binario (I)

Un A.B. est constituido por un conjunto finito de


elementos llamados nodos. raz

subrbol izquierdo
a subrbol derecho
Un rbol binario:
no tiene nodos (est vaco); o b c
tiene un nodo llamado raz, junto con otros dos rboles
binarios llamados subrboles derecho e izquierdo
d e f
de la raz. g h

Nota: Una parte importante del material presentado en esta seccin


fue elaborado por Marcelo Silva F.

Franco Guidi Polanco 13 Franco Guidi Polanco 14

Representacin de un rbol binario (II) Igualdad de rboles binarios

Para ser iguales, dos rboles deben tener tanto la


misma estructura, como el mismo contenido.
raz
a
subrbol derecho
b c
d e f
subrbol izquierdo a a
g h
b b

Franco Guidi Polanco 15 Franco Guidi Polanco 16


rboles binarios llenos rboles binarios completos

Un rbol binario lleno es aquel en que cada nodo Un rbol binario completo tiene una forma
es un nodo interno con dos hijos no vacos, o una restringida, que se obtiene al ser llenado de
hoja. izquierda a derecha. En un A.B. Completo de
altura d, todos los niveles, excepto posiblemente el
nivel d estn completamente llenos.
a a
b c b c
a
d e f e f Es un A.B. completo b c
pero no es un A.B. lleno
g h g h
d e f
No es A.B. lleno Es A.B. lleno

Franco Guidi Polanco 17 Franco Guidi Polanco 18

Representacin de rboles binarios mediante


Nmero de nodos en un rbol binario
nodos y referencias
El mximo nmero de nodos en el nivel i de un
rbol binario es 2(i-1).
El mximo nmero de nodos en un rbol binario
a
de altura K es 2(K)-1.

b c

d e

Franco Guidi Polanco 19 Franco Guidi Polanco 20


Diagrama de clases de un rbol binario Diagrama de objetos de un rbol binario

Diagrama de clases rbol binario de enteros: :ABB

root:ABBNode
ABB ABBNode
1..1 data:int data:20

insert(i:int)
find(d:Data):boolean root setData(i:int)
delete(i:int) getData():int :ABBNode :ABBNode
setLeft(n:ABBNode)
getLeft():ABBNode data:7 data:32
left setRight(n:ABBNode) right
getRight():ABBNode
isLeaf():boolean

:ABBNode :ABBNode :ABBNode


data:2 data:15 data:40

Franco Guidi Polanco 21 Franco Guidi Polanco 22

Representacin de rboles binarios mediante


Recorrido de rboles binarios
arreglos
Si la raz de un subrbol se almacena en A[i], su Un recorrido es cualquier proceso destinado a
hijo izquierdo se almacena en A[2*i], y su hijo visitar los nodos de un rbol binario en un
derecho en A[2*i+1]. determinado orden.
Cualquier recorrido que visite cada nodo
a exactamente una vez, se denomina una
enumeracin de los nodos del rbol.
b c Recorridos de enumeracin a analizar:
Preorden
d e f Inorden
Postorden
g h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

a b c d e f g h

Franco Guidi Polanco 23 Franco Guidi Polanco 24


Recorrido en Preorden Cdigo para recorrido Preorden

Dado un rbol binario:


void preorder(BinNode rt) // rt es la raz del subarbol
{
1) Visitar su raz. if (rt==null)
2) Recorrer en preorden su subrbol izquierdo. return;
visit(rt)
// subarbol vaco
// hace algo con el nodo
3) Recorrer en preorden su subrbol derecho. preorder(rt.left());
preorder(rt.right());
}

1
2 3

Franco Guidi Polanco 25 Franco Guidi Polanco 26

Ejemplo de recorrido en Preorden Recorrido en Inorden

Dado un rbol binario:


a
1
b c 1) Recorrer en inorden su subrbol izquierdo.
2 3
d e f 2) Visitar su raz.
3) Recorrer en inorden su subrbol derecho.
g h
i
2
j k
1 3
a b d c e f g i j k h
Franco Guidi Polanco 27 Franco Guidi Polanco 28
Cdigo para recorrido Inorden Ejemplo de recorrido en Inorden

2 a
void inorder(BinNode rt) // rt es la raz del subarbol
{ 1 3 b c
if (rt==null)
return; // subarbol vaco
inorder(rt.left()); d e f
visit(rt) // hace algo con el nodo

}
inorder(rt.right()); g h
i
j k

d b a e c g j i k f h
Franco Guidi Polanco 29 Franco Guidi Polanco 30

Recorrido en Postorden Cdigo para recorrido Postorden

Dado un rbol binario:


void postorder(BinNode rt) // rt es la raz del subarbol
{
1) Recorrer en postorden su subrbol izquierdo. if (rt==null)
2) Recorrer en postorden su subrbol derecho. return; // subarbol vaco
postorder(rt.left());
3) Visitar su raz. postorder(rt.right());
visit(rt) // hace algo con el nodo
}

3
1 2

Franco Guidi Polanco 31 Franco Guidi Polanco 32


Ejemplo de recorrido en Postorden rbol binario de bsqueda

a Supongamos que tenemos un conjunto de n


3 elementos que pueden ser ordenados por alguna
1 2 b c clave.
En un rbol binario de bsqueda (ABB), todos
d e f los nodos almacenados en el subrbol izquierdo de
g h un nodo cuyo valor clave es C tienen claves
menores que C, mientras que todos los nodos
i ubicados en el subrbol derecho tienen claves
mayores que C.
j k

d b e j k i g hf c a
Franco Guidi Polanco 33 Franco Guidi Polanco 34

Ejemplos de rboles binarios de bsqueda Ingreso de elementos a un ABB

a
{ 10, 5, 7, 15, 14, 12, 18 } { 15, 18, 14, 5, 10, 12, 7 }
b c 15
c
d e f 10 14 18
<c >c No es ABB
5 15
5
Definicin de ABB c
7 14 18 10
b e
12 7 12
a d f
Es ABB

Franco Guidi Polanco 35 Franco Guidi Polanco 36


ABB de referencia Ingreso de elementos a un ABB (cont.)

ABB

insert(e:Element)
find(key:int):Element Element
delete(i:int):Element ABBNode {interface} private BinNode insert (BinNode rt, Element val)
1 {
data getKey():int if (rt == null)
1 setData(e:Element) return new BinNode(val);
root getData():Element Element it = (Element)rt.element();
setLeft(n:ABBNode) if (it.key() > val.key())
getLeft():ABBNode rt.setLeft(insert(rt.left(), val));
setRight(n:ABBNode)
left right else
getRight():ABBNode
rt.setRight(insert(rt.right(), val));
isLeaf():boolean
return rt;
}

Franco Guidi Polanco 37 Franco Guidi Polanco 38

Caractersticas del ingreso de elementos a un ABB Recorrido Inorden en ABB

Los elementos agregados a un ABB siempre son


15
incorporados inicialmente como hojas.
Un conjunto de elementos dado puede generar 10 14 18
diversos ABB, dependiendo del orden en que son 5 15
ingresados. 5

7 14 18 10

12 7 12

5 7 10 12 14 15 18 5 7 10 12 14 15 18

Franco Guidi Polanco 39 Franco Guidi Polanco 40


Caractersticas del recorrido Inorden de un ABB Bsqueda en ABB

Si bien existen muchos ABBs posibles para un Para hallar un elemento con clave C, en un
mismo conjunto de elementos, el recorrido rbol A:
Inorden de todos estos rboles siempre entrega el Si la raz del rbol A almacena C, la bsqueda
conjunto ordenado de menor a mayor. termina exitosamente.
Si C es menor que el valor de la raz de A, buscar
en el subrbol izquierdo. Si C es mayor que el
valor de la raz, buscar en el subrbol derecho.
La bsqueda termina al hallar el valor C, o al
pretender buscar en un subrbol vaco.

Franco Guidi Polanco 41 Franco Guidi Polanco 42

Bsqueda en ABB (cont.) Ejemplo de bsqueda en ABB

10 10
Elem find(BinNode rt, int key) {
if (rt == null) 5 15 5 15
return null;
Element it = (Element)rt.element();
if ((int)it.key() > key) 7 14 18 7 14 18
return find(rt.left(), key);
else if (it.key() == key)
return it; 12 12
else
return find(rt.right(), key);
} Buscar 12 Buscar 16
Bsqueda exitosa Bsqueda infructuosa

Franco Guidi Polanco 43 Franco Guidi Polanco 44


Eliminar nodo que es una hoja o tiene a lo ms
Eliminacin de elementos de un ABB
un hijo

Se pueden presentar tres casos:

El elemento no existe. 10 10
El elemento es una hoja o tiene a lo ms un hijo.
5 15 7 15
El elemento tiene dos hijos.
7 14 18 14 18

12 12

Franco Guidi Polanco 45 Franco Guidi Polanco 46

Ejemplo eliminacin de nodo con dos hijos Eliminar nodo con dos hijos

1. Hallar el nodo que contiene el menor de los


10 10
elementos mayores del nodo a eliminar (el
5 15 5 16 elemento ms a la izquierda de su subrbol
derecho)
7 14 18 7 14 18 2. Reemplazar los datos del nodo eliminar con
los del nodo hallado.
16 17 3. Eliminar el nodo hallado, que tiene a lo ms
El menor de los un hijo, con el procedimiento descrito
17 elementos
mayores previamente.
(Nodo ms a la
izquierda del
subrbol derecho)

Franco Guidi Polanco 47 Franco Guidi Polanco 48


Importancia de una estructura balanceada en los
Utilidad de los rboles binarios de bsqueda
ABB
Al buscar, el ABB permite descartar a priori un La estructura de un ABB es importante al
subconjunto de elementos, en forma anloga a la momento de realizar bsquedas en l.
bsqueda binaria en arreglos ordenados.
El ABB presenta adems la ventaja de poder ser
18
implementado con punteros (estructura dinmica). 10
La incorporacin y eliminacin de elementos al 15
5 15
ABB es mas rpida que en arreglos ordenados. 14

3 7 14 18 10

7
En el peor de los casos se En el peor de los
hacen 3 iteraciones para 5 casos se hacen 7
una bsqueda. iteraciones para
3 una bsqueda.

Franco Guidi Polanco 49 Franco Guidi Polanco 50

You might also like