Professional Documents
Culture Documents
d
d
j
j
d
n
t
25/04/2014 Arboles 21
Definicin y Conceptos bsicos
rbol binario completo
Profundidad dado t
n
( ) 1 1 log
2
+ =
n
t d
25/04/2014 Arboles 22
Definicin y Conceptos bsicos
rbol binario casi completo
rbol binario de profundidad d
1. Cualquier nodo nd a un nivel menor que d-1
tiene dos hijos
2. Para cualquier nodo nd en el rbol con un
descendiente derecho en el nivel d, nd debe
tener un hijo izquierdo y cada descendiente
izquierdo de nd es una hoja en el nivel d o
tiene dos hijos
25/04/2014 Arboles 23
Definicin y Conceptos bsicos
rbol binario casi completo (No x 1)
25/04/2014 Arboles 24
A
B C
D
E
G F
Definicin y Conceptos bsicos
rbol binario casi completo (No x 2)
25/04/2014 Arboles 25
A
B C
D E G F
H I J K
Definicin y Conceptos bsicos
rbol binario casi completo
25/04/2014 Arboles 26
A
B C
D E G F
H I
Definicin y Conceptos bsicos
rbol binario casi completo
25/04/2014 Arboles 27
A
B C
D E G F
H I J
Definicin y Conceptos bsicos
rbol binario casi completo numerado
25/04/2014 Arboles 28
A
B C
D E G F
H I
1
2 3
4 5 6 7
8 9
Definicin y Conceptos bsicos
rbol binario casi completo
25/04/2014 Arboles 29
A
B C
D E G F
H I J
1
2 3
4 5 6 7
8 9 10
Definicin y Conceptos bsicos
rbol binario casi completo con n hojas
Estrictamente binario 2n-1 nodos
No estrictamente binario 2n nodos
25/04/2014 Arboles 30
Definicin y Conceptos bsicos
rbol estrictamente binario casi
completo
Si tiene n nodos y
Si n es impar
25/04/2014 Arboles 31
Definicin y Conceptos bsicos
rbol estrictamente binario casi completo
25/04/2014 Arboles 32
A
B C
D E G F
H I
1
2 3
4 5 6 7
8 9
Definicin y Conceptos bsicos
rbol binario casi completo (NEstric)
25/04/2014 Arboles 33
A
B C
D E G F
H I J
1
2 3
4 5 6 7
8 9 10
Definicin y Conceptos bsicos
Observacin
rbol binario casi completo de profundidad
d, est en medio del rbol binario completo
de profundidad d-1 (2
d
-1 nodos) y el rbol
binario completo de profundidad d (2
d+1
-1
nodos)
25/04/2014 Arboles 34
Definicin y Conceptos bsicos
Observacin
Si t
n
total nodos (rbol binario casi completo)
Ejemplo: t
n
e[4,7] profundidad = 2
Ejemplo: t
n
e[8,15] profundidad = 3
(
n
t x x d profundida
2
log / s =
25/04/2014 Arboles 35
Operaciones Bsicas
info(p)=A
25/04/2014 Arboles 36
A
p
Operaciones Bsicas
izquierda(p) = apuntador a B
25/04/2014 Arboles 37
A
B C
p
Operaciones Bsicas
derecha(p) = apuntador a C
25/04/2014 Arboles 38
A
B C
p
Operaciones Bsicas
padre(p) = apuntador a A
25/04/2014 Arboles 39
A
B C
p
Operaciones Bsicas
hermano(p) = apuntador a C
25/04/2014 Arboles 40
A
B C
p
Operaciones Bsicas
izquierda(p) = nulo
25/04/2014 Arboles 41
A
p
Operaciones Bsicas
derecha(p) = nulo
25/04/2014 Arboles 42
A
p
Operaciones Bsicas
padre(p) = nulo
25/04/2014 Arboles 43
A
B C
p
Operaciones Bsicas
hermano(p) = nulo
25/04/2014 Arboles 44
A
B C
p
Operaciones Bsicas
es_izquierdo(p) = verdadero
25/04/2014 Arboles 45
A
B C
p
Operaciones Bsicas
es_derecho(p) = verdadero
25/04/2014 Arboles 46
A
B C
p
Operaciones Bsicas
es_izquierdo(p)
q = padre(p);
if(q == null)
return(false); //p apunta a raz
if(izquierdo(q) == p)
return(true);
return(false)
25/04/2014 Arboles 47
Operaciones Bsicas
es_derecho(p)
EJERCICIO 1 PUNTO EXTRA
SOBRE 3 CALIFICACION
25/04/2014 Arboles 48
Operaciones Bsicas
hermano(p)
if(padre(p) == null)
return(false); //p apunta a raz
if(es_izquierdo(p))
return(derecho(padre(p)));
return(izquierdo(padre(p)));
25/04/2014 Arboles 49
Operaciones Bsicas
Complementarias
haz_arbol(x)
Contenido de la raz x
25/04/2014 Arboles 50
x
p
Operaciones Bsicas
Complementarias
pon_izquierdo(p,x)
crea hijo izquierdo de p
25/04/2014 Arboles 51
A
p
A
p
x
Operaciones Bsicas
Complementarias
pon_derecho(p,x)
crea hijo derecho de p
25/04/2014 Arboles 52
A
p
A
p
B B x
Aplicaciones
rboles de decisin
Encontrar todos los duplicados en una lista
25/04/2014 Arboles 53
Info sig info sig info sig info
sig
Lista
nodo nodo nodo nodo
nulo
Aplicaciones
rboles de decisin: duplicados
Si hay n elementos en la lista
necesitaremos comparaciones
25/04/2014 Arboles 54
=
1
1
) (
n
i
i n
Aplicaciones
rboles de decisin: duplicados
/*lee el primer nmero e insertarlo
en un rbol binario de nodo nico */
scanf(%d,&number);
tree = haz_arbol(number);
while(mientras haya nmeros izquierdos en la entrada){
scanf(%d,&number);
p = q = tree;
while(number != info(p) && q != NULL){
}
}
25/04/2014 Arboles 55
Aplicaciones
rboles de decisin: duplicados
p = q;
if(number < info(p))
q = izquierdo(p);
else
q = derecho(p);
}//fin(while)
if(number == info(p))
printf(%d is a duplicate\n,number);
}
25/04/2014 Arboles 56
Aplicaciones
rboles de decisin: duplicados
//insertar number a la derecha o izquierda
elseif(number < info(p))
pon_izquierdo(p,number);
else
pon_derecho(p,number);
}//fin(while)
25/04/2014 Arboles 57
Aplicaciones
rboles de decisin: duplicados en {14,
15, 4, 9, 7, 18, 3, 5, 16, 4, 20, 17, 9, 14, 5}
25/04/2014 Arboles 58
14
15 4
3 9
7
5
18
16 20
17
Aplicaciones
Recorridos
Pasar por todo el rbol numerando cada
uno de sus nodos a la vez
Ej. Imprimir contenido
VISITAR
25/04/2014 Arboles 59
Aplicaciones
Recorridos
Definidos de manera recursiva
PREORDER: primero en profundidad
INORDER: orden simtrico
POSTORDER
25/04/2014 Arboles 60
Aplicaciones
Recorridos (PREORDER)
1. Visitar la raz
2. Recorrer el sub-rbol izquierdo en pre-
order
3. Recorrer el sub-rbol derecho en pre-
order
25/04/2014 Arboles 61
Aplicaciones
Recorridos (INORDER)
1. Recorrer el sub-rbol izquierdo en in-
order
2. Visitar la raz
3. Recorrer el sub-rbol derecho en in-order
25/04/2014 Arboles 62
Aplicaciones
Recorridos (POST-ORDER)
1. Recorrer el sub-rbol izquierdo en post-
order
2. Recorrer el sub-rbol derecho en post-
order
3. Visitar la raz
25/04/2014 Arboles 63
Aplicaciones
Recorridos
PREORDER: ABDGCEHIF
INORDER: DGBAHEICF
PORT-ORDER: GDBHIEFCA
25/04/2014 Arboles 64
A
C B
D
G
F E
H I
Aplicaciones
Recorridos
PREORDER: ABCEIFJDGHKL
INORDER: EICFJBGDKHLA
POSTORDER: IEJFCGKLHDBA
25/04/2014 Arboles 65
A
H
B
C D
F E
K J L I
G
Aplicaciones
Bsqueda binaria
Algoritmo similar al que encuentra
duplicados
Diferencia: insertar duplicados donde
corresponda
Si num<info(p) insertar en izquierdo
Si num>info(p) insertar en derecho
25/04/2014 Arboles 66
Aplicaciones
Bsqueda binaria {14, 15, 4, 9, 7, 18, 3, 5, 16,
4, 20, 17, 9, 14, 5}
25/04/2014 Arboles 67
14
15 4
3 9
7
5
18
16 20
17
9
14
5 4
Aplicaciones
Bsqueda binaria (propiedades)
elementos e subrbol(izquierdo(n)) son
menores que info(n)
elementos e subrbol(derecho(n)) son
mayores o iguales que info(n)
Recorrido inorder extraccin ordenada
ascendente
25/04/2014 Arboles 68
Aplicaciones
Expresiones matemticas
Con rboles estrictamente binarios
Raiz = operador
Sub-rbol izquierdo EXPRESION(operando
1)
Sub-rbol derecho EXPRESION(operando
2)
HOJAS operandos
25/04/2014 Arboles 69
Aplicaciones
Expresiones matemticas: A + B*C
25/04/2014 Arboles 70
+
* A
C B
Aplicaciones
Expresiones matemticas
Recorridos
25/04/2014 Arboles 71
PRE-ORDER = PREFIJA +A *BC
IN-ORDER = INFIJA A+B * C
POST-ORDER = POSTFIJA ABC*+
Aplicaciones
Expresiones matemticas: (A+B) * C
25/04/2014 Arboles 72
+
*
A
C
B
Aplicaciones
Expresiones matemticas
Recorridos
No se puede recuperar una expresin que
requiere parntesis
25/04/2014 Arboles 73
PRE-ORDER = PREFIJA *+ABC
IN-ORDER = INFIJA A + B * C
POST-ORDER = POSTFIJA AB+C*
Aplicaciones
Expresiones matemticas:
A+(B-C)*D$(E*F)
25/04/2014 Arboles 74
+
* A
C B
- $
D
F
*
E
Aplicaciones
Expresiones matemticas
Recorridos
No se puede recuperar una expresin que
requiere parntesis
25/04/2014 Arboles 75
PRE-ORDER = PREFIJA +A*-BC$D*EF
IN-ORDER = INFIJA A+BC*D$E*F
POST-ORDER = POSTFIJA ABC-DEF*$*+
Aplicaciones
Expresiones matemticas:
(A+ B*C)$((A+B)*C)
25/04/2014 Arboles 76
$
* +
C B
A C *
B
+
A
Aplicaciones
Expresiones matemticas
Recorridos
No se puede recuperar una expresin que
requiere parntesis
25/04/2014 Arboles 77
PRE-ORDER = PREFIJA $+A*BC*+ABC
IN-ORDER = INFIJA A+B*C$A+B*C
POST-ORDER = POSTFIJA ABC*+AB+C*$
Aplicaciones
Hacer ejercicios 5.1.1 5.1.14
(Tenembaum)
Recorridos en C (Tenembaum, pp 270-
273
25/04/2014 Arboles 78
Representacin
De arreglo vinculado
#define NUMNODOS 500
typedef struct nodo_struc{
int info;
int izquierdo;
int derecho;
int padre;
int es_izq;
int hermano;
}struc_node;
25/04/2014 Arboles 79
Representacin
De arreglo vinculado
struc_nodo node[NUMNODOS];
/* node[p].info, node[p].izquierdo,
node[p].derecho, node[p].padre,
node[p].hermano
*/
if(node[p].es_izq == 1) p es hijo
izquierdo
if(node[p].es_izq != 1) p es hijo derecho
if(node[p].padre == -1) p es raiz
25/04/2014 Arboles 80
Representacin
De arreglo vinculado
//alternativamente
if(node[p].padre < 0) hijo izquierdo
if(node[p].padre > 0) hijo derecho
abs(node[p].padre) apunta al padre de p
25/04/2014 Arboles 81
Representacin
De arreglo vinculado
//habilitar rbol
int avail, i;
for(i=0 ; i< NUMNODOS; i++){
node[i].izquierdo = i+1;
}
node[NUMNODOS-1].izquierdo = 0;
25/04/2014 Arboles 82
Representacin
Dinmica de nodos
//otra definicin
typedef struc tiponode{
int info;
tiponode *izquierdo;
tiponode *derecho;
tiponode *padre;
}nodetipo;
nodotipo *node_ptr;
25/04/2014 Arboles 83
Representacin
Dinmica de nodos (hazarbol)
node_ptr hazarbol(int x){
node_ptr p;
p = obten_nodo();
pinfo = x;
pizquierdo = NULL;
pderecho = NULL;
return(p);
}//fin hazarbol
25/04/2014 Arboles 84
Representacin
Dinmica de rboles (poner_izq)
void poner_izq(nodeptr p, int x){
if(p == NULL)
//error
elseif(pizquierdo != NULL)
//error de insercin
else
pizquierdo = hazarbol(x)
}
//para poner_der ajustar apuntadores
25/04/2014 Arboles 85
Representacin
Observaciones
Padre es innecesario si el rbol se recorre
siempre en forma descendente (de la raz a
las hojas). Ej. Recorridos vistos no lo
ocupan
25/04/2014 Arboles 86
Representacin
Observaciones
Izquierdo/Derecho son innecesarios si el
rbol se recorre en forma ascendente (de
las hojas a la raz)
25/04/2014 Arboles 87
Representacin
Nodos internos vs externos
Dado que las hojas no tienen hijos no
es necesario izquierdo/derecho
Usar dos conjuntos de nodos:
HOJAS/NO_HOJAS
25/04/2014 Arboles 88
Representacin
NO_HOJAS:
info (si hay informacin), izquierdo,
derecho
Registro dinmicos/arreglo de registros
controlados usando lista
25/04/2014 Arboles 89
Representacin
HOJAS:
No tiene izquierdo/derecho
Conservan informacin
Dinmicamente con campo nico info
25/04/2014 Arboles 90
Representacin
Nodos
NO_HOJAS internos
HOJAS externos
Todos deben ser especificados de manera
explcita
25/04/2014 Arboles 91
Representacin
Arreglo implcito rbol binario
Si n nodos de rbol binario casi completo
se numeran:
N(hijo_izquierdo)=2*N(padre)
N(hijo_derecho) = 2*N(padre)+1
Sin vnculos!!!???!!!
ARREGLO
25/04/2014 Arboles 92
Representacin
Arreglo implcito rbol binario
25/04/2014 Arboles 93
A
C B
D G F
E
H I
Representacin
Arreglo implcito rbol binario
25/04/2014 Arboles 94
A
C B
D G F
E
H I
A B C D E F G H I
0 1 2 3 4 5 6 7 8
Representacin
Arreglo implcito rbol binario
info(0) raz, info(1) izquierdo e
info(2) derecho
Hijo izquierdo de p 2p+1
Hijo derecho de p 2p+2
25/04/2014 Arboles 95
A B C D E F G H I
0 1 2 3 4 5 6 7 8
Representacin
Arreglo implcito rbol binario
izquierdo(p) = 2*p + 1
derecho(p) = 2*p + 2
Si p es_izquierdo, hermano(p) = p + 1
Si p es_derecho, hermano(p) =p - 1
25/04/2014 Arboles 96
Representacin
Arreglo implcito rbol binario
padre(p)= (p - 1)/2
p apunta a izquierdo p es impar
{p%2 != 0 p es impar}
25/04/2014 Arboles 97
Representacin
Arreglo implcito rbol binario
25/04/2014 Arboles 98
A
C B
D G F
E
H I J
Representacin
Arreglo implcito rbol binario
25/04/2014 Arboles 99
A
C B
D G F
E
H I J
0 1 2 3 4 5 6 7 8
A B C D E F G H I J
9
Representacin
Arreglo implcito rbol binario
info(0) raz, info(1) izquierdo e
info(2) derecho
Hijo izquierdo de p 2p+1
Hijo derecho de p 2p+2
25/04/2014 Arboles 100
A B C D E F G H I
0 1 2 3 4 5 6 7 8
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 101
A
C B
E D
F G
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 102
A
C B
E D
F G
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 103
A
C B
E D
F G
0 1 2 3 4 5 6 7 8
A B C D E
9
F G
10 11 12
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 104
H
J I
L K
M
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 105
H
J I
L K
M
Representacin
Arreglo implcito rbol binario
(generalizacin)
25/04/2014 Arboles 106
H
J I
L K
M
0 1 2 3 4 5 6 7 8
H I J K L M
9
Representacin
Cul es mejor? Secuencial?
Ms sencilla
Asegurar apuntadores estn dentro lmites
Ahorra espacio en rboles casi completos
til si se sabe de antemano el nmero
mximo de nodos a almacenar
25/04/2014 Arboles 107
Representacin
Cul es mejor? Dinmica (vinculada)?
Requiere campos izquierdo, derecho y
padre (no necesario)
No hay limitacin en espacio en memoria
en contraste con el arreglo que se define
de antemano
25/04/2014 Arboles 108
Otros rboles
Arboles binarios hilvanados
Recorridos normales necesitan una pila,
cmo eliminar su uso?
Eficientar recorridos
25/04/2014 Arboles 109
Otros rboles
rboles binarios hilvanados
25/04/2014 Arboles 110
A
C B
D
G
F E
H I
Otros rboles
rboles binarios hilvanados
25/04/2014 Arboles 111
A
H
B
C D
F E
K J L I
G
Otros rboles
rboles binarios hilvanados
Definicin, Tenembaum, pp 273
Recorridos, Tenembaum, pp 274-277
Recorridos con campo padre, Tenembaum,
pp 277-279
25/04/2014 Arboles 112
Otros rboles
rboles binarios heterogneos
info(p) = tipo/estructura de datos
homogneo/uniforme
Pero, 3 + 4 * (6 7) / 5 + 3???
Cdigos, tenembaum, pp 280-281
25/04/2014 Arboles 113
Otros rboles
rboles binarios heterogneos
25/04/2014 Arboles 114
+
3 +
/
3
+
4 -
6 7
Ejercicios
Tenembaum, 5.2.1-5.2.13
25/04/2014 Arboles 115
Ms Aplicaciones
Algoritmo de Huffman
Compresin
Tenembuam, pp. 283-292
Listas como rboles binarios
Tenembam, pp. 292-294, 299-303
Localizacin del k-simo elemento
Tenembaum, pp. 294-296
25/04/2014 Arboles 116
Ms aplicaciones
Supresin de un elemento
Tenembaum, pp. 296-299
El problema de Josephus
Tenembaum, seccin 4.5 y pp. 303-30
Ms aplicaciones
Tenembaum, pp 305-320
Juegos (gato)
Tenembaum, pp. 321-328
25/04/2014 Arboles 117