Professional Documents
Culture Documents
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
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
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)
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
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
b c
d e
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
a b c d e f g h
1
2 3
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
3
1 2
d b e j k i g hf c a
Franco Guidi Polanco 33 Franco Guidi Polanco 34
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
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;
}
7 14 18 10
12 7 12
5 7 10 12 14 15 18 5 7 10 12 14 15 18
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.
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
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
Ejemplo eliminacin de nodo con dos hijos Eliminar nodo con dos hijos
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.