Professional Documents
Culture Documents
C++
Dr. Romeo Snchez Nigenda.
E-mail: romeo.sanchez@gmail.com
http://yalma.fime.uanl.mx/~romeo/
Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar
Chacn
Horas de Tutora: 10am-11am Martes y Jueves,
3:30pm-4:30pm Mircoles, 2:00pm-4:00pm Viernes.
Website:
http://yalma.fime.uanl.mx/~romeo/ED/2011/
Sesiones: 48
Material de apoyo:
Estructura de Datos con C y C++.
Yedidyah Langsam, Moshe J. Augenstein, Aaron M. Tenenbaum,
Brooklyn College
Segunda Edicin, Prentice-Hall.
Algorithms. Third Edition.
Parts 1-4, Fundamentals Data Structures Sorting Searching
Robert Sedgewick.
Estructura de Datos.
Romn Martnez, Elda Quiroga.
Thomson Learning.
Cualquier libro de Estructura de Datos!
Software:
6. rboles
Objetivo:
Temario:
rboles
rboles
rboles
rboles
en general
binarios
balanceados
multicaminos
rboles
En
Podemos
Encontramos
diaria:
rboles
Existen
rboles en general
rboles binarios (AVL, Rojo-Negro, AA)
rboles balanceados
rboles multi-caminos (B, B+, B*)
rboles: Terminologa
rboles
rboles: Definicin
General
rboles: Definicin
General
rboles: Ejemplos
rboles Binarios
descendiente
hoja
hermanos
rboles Binarios
Profundidad
Nivel = 3
j=0
rboles Binarios:
Operaciones
Entre las aplicaciones ms comunes tenemos:
Null
father(p) : Retorna un
apuntador al padre del nodo
a
c
e
isLeft(d) = true
isLeft(e) = falseisRight(g) = true
brother(p) : Retorna un apuntador al hermano del nodo.
Note que si no existe un nodo que satisfaga cualquiera de las funciones anterio
retorna un nulo (null) entonces.
rboles Binarios:
Operaciones
Las
Bool isLeft(p)
q = father(p)
if(q == null)
return false;
if(left(q) == p)
return true;
return false;
isLeft(a) ?
a
c isLeft(c) ?
isLeft(b) ? b
d
Implementa isRight(p)!
rboles Binarios:
Operaciones
brother(p)
father
a
if(father(p) == null)
b
return null;
d
e
f
if(isLeft(p))
return right(father(p))
return left(father(p))
cbrother(c) ?
g
Operaciones adicionales:
-makeTree(p) : Crea un rbol binario con un nodo nico (raz)
- setLeft(p, x) : Establece un nodo x como hijo izquierdo de otro nodo p,
siempre y cuando p no tenga un hijo del lado izquierdo ya establecido.
- setRight(p, x) : Similar a la funcin anterior.
1
5
1
5
1
5
1
5
1
5
1
5
1
5
1
9
1
9
1
6
1
7
1
5
1
9
1
6
1
7
Ejemplo 2: Expresiones
A+B*C
*
B
+
(A+B)*C
(A+B*C)$((A+B)*C)
{
* father; //No necesario
* left;
Inf
* right;
o
R
p
pNode
Y N N N
X N N N
pNode
N N
N N
makeTree(x);
X N N N
X N
pNode->left=
pNode ->left ->father = pNode;
b
d
Este
En
1
5
1
9
1
6
1
7
1
5
1
9
1
6
1
7
b)
b)
Dado
Recorrido de rboles
binarios
Recorrer un rbol binario significa visitar la raz y recorrer
Orden previo:
1. Visitar la raz
2. Recorrer el subrbol izquierdo en orden previo
3. Recorrer el subrbol derecho en orden previo
A
2
3
ABDGCEHIF
Recorrido de rboles
binarios
Orden Simtrico/Inorden:
3
1
DGBAHEICF
Recorrido de rboles
binarios
Orden Posterior:
1. Recorrer el subrbol izquierdo en orden posterior
2. Recorrer el subrbol derecho en orden posterior
3. Recorrer la raz
3
2
GDBHIEFCA
1
1
5
5
1
1
5
5
1
1
9
9
4
4
3
3
1
1
9
9
4
4
1
1
6
6
8
8
1
1
5
5
1
1
6
6
8
8
1
1
5
5
1
1
9
9
4
4
1
1
9
9
8
8
1
1
6
6
8
8
1
1
6
6
1
1
5
5
2
21
1
3
39
9
4
4
3
3
8
8
1
1
6
6
2
2
5
5
1
1
8
8
2
2
3
4
3
4
2
2
4
4
1
1
5
5
1
1
5
5
1
1
9
9
4
4
if (p->left == NULL)
rp = p-> right;
else if (p-> right == NULL)
1
1
5
5
1
1
9
9
4
4
1
1
9
9
8
8
1
1
6
6
8
8
1
1
6
6
1
1
5
5
rp = p->left;
else {
2
21
1
3
39
9
4
4
TNODEPTR f = p;
rp = p-> right;
TNODEPTR s = rp->left;
while (s != NULL) {
f = rp;
rp = s;
1
1
6
6
8
8
1
1
5
5
}
if (p == NULL) return;
1
1
6
6
8
8
1
1
9
9
4
4
3
3
8
8
1
1
6
6
2
2
5
5
1
1
8
8
2
2
3
4
3
4
2
2
4
4
rboles Balanceados
La
Un
El
Por
rboles Balanceados
-1
-1
0
0
1
1
0
0
0
0
0
0
-1
-1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
rbol AVL
Debido
Las
El
1
1
5
5
7
7
5
5
2
2
8
8
6
6
2
2
2,5,6,7,8,10,15
1
1
0
0
5
5
6
6
8
8
1
1
5
5
1
1
0
0
5
5
1
1
5
5
7
7
2
2
7
7
8
8
Rotacin derecha
5
5
2,5,6,7,8,10,15
1
1
0
0
6
6
8
8
Recorrido Inorder
1
1
5
5
2
2
6
6
Rotacin izquierda
Algoritmo de Rotacin
Izquierda
q = right(p);
temp = left(q);
left(q) = p;
right(p) = temp
p
7
7
l
lr
6
6
8
8
7
7
5
5
1
1
5
5
1
1
5
5
1
1
0
0
5
5
2
2
1
1
0
0
8
8
lr
r
2
2
6
6
Rotacin izquierda
Rotaciones Dobles
p
1
1
5
5
7
7
5
5
Rotacin a
la izquierda
5
5
6
6
Rotacin a
la derecha
2
2
6
6
1
1
0
0
9
9
1
1
2
2
8
8
5
5
lr
8
8
7
7
8
8
6
6
9
9
2
2
1
1
0
0
7
7
2
2
1
1
5
5
9
9
1
1
2
2
1
1
0
0
1
1
5
5
Casos de Insercin
La
Nuevo nodo
Caso 1: Izquierda
* Imgenes tomadas de Wikimedia bajo licencia de documentacin libre GNU
Casos de Insercin
Caso
2: Derecha
Nuevo nodo
Casos de Insercin
Caso
Rotacin Izquierda
Rotacin Derecha
Casos de Insercin
Caso
Rotacin Derecha
Rotacin Izquierda
rboles Multicaminos
Un
K0
Kj-1
Kj
Kn2
Sn1
X < K0
X > Kn-2
rboles Multicaminos:
Ejemplos
rbol multicamino de orden 4.
A
12
B
6
50
85
C
10
D
60
37
F
25
E
70
80
100
120
150
G
62
65
69
11
0
numTrees(A) => 4
A
key(A,0)
12
key(A,2)
50
85
child(A,3)
child(A,0)
B
6
C
10
37
D
60
E
70
80
100
120
150
child(p,0) apunta a un
subrbol cuyas llaves
son todas menores que
la llave key(p,0).
B
child(p,i) para
1<=i<=numTrees(p)-2,
contiene todas las llaves
en el rbol entre key(p, i1) y key(p,i).
child(p, numTrees(p)-1)
A
key(A,0)
key(A,2)
apunta a un subrbol
12
50
que contiene
85
nicamente llaves
mayores a key(p,
numTrees(p)-2).
C
D
E
6
10
child(A,0):
Las
llaves de
3
7
60
70
80
100
120
150
child(A,3): Las
llaves de este
nodo:
traverse(T node){
if(node != NULL){
nt = numTrees(node);
nt = 4
0<=i<3
cout<<key(node, i);
12
}
traverse(son(node,nt-1));
son(A,0)
}
}
50
85
son(A,1) son(A,2)
C
6
10
3
7
son(A,3)
D
60
E
70
80
100
120
150