Professional Documents
Culture Documents
PARTE 1
CLASE N12
Leissi M. Castaeda Len
lcl@upnorte.edu.pe
lcl@comunidad.upn.edu.pe
https://sites.google.com/site/leissicl/
1.
2.
3.
4.
5.
6.
Arboles Binarios
Arboles Binarios de Bsqueda
Arboles AVL
Arboles B
Arboles B+
Arboles Roji-Negro
rboles
Introduccin
Introduccin
rboles
rboles
Diagramas de Venn
Anidacin de parntesis
Notacin decimal de Dewey
Notacin Indentada
Grafo (se distinguen nodos y arcos)
Ejemplo
b) (A(B(D(I),E,F,(J,K)),C(G,H(L))))
c) 1.A, 1.1.B,
1.1.1.D, 1.1.1.1.I,
1.1.2.E, 1.1.3.F,
1.1.3.1.J,
1.1.3.2.K, 1.2.C,
1.2.1.G, 1.2.2.H,
1.2.2.1.L
B
D
F
J
11
F
J
12
13
LCI =
n
i =1
*i
Ejemplo
h
LCI = ni * i
B
D
i =1
LCE =
n
i=2
ei
*i
Ejemplo
A
h +1
LCE = nei * i
i=2
Ejercicio
rboles Binarios
20
rboles Binarios
21
Ejemplo:
47
7
59
32
11
50
77
22
+
*
^
3.5
23
rbol Genealgico.
Osvaldo Cario
Battistuti
Jose Cario
Scandallo
Antonio Cario
Godoy
Maria Scandallo
Miscoria
Maria Battistuti
Valiente
Roberto Battistuti
Mazzotti
Maria Valiente
Martin
24
A)
B)
B
C
D
B
C
A)
F
A
B)
C
B
R
D
B)
A
C
C
B
D
D
A)
B)
N
D
C)
D)
A
C
B
D
A)
B)
N
D
A
C)
D)
A
C
B
D
A
B
B) DE ALTURA 4:
G
M
2.
3.
B
D
H
A
L
B
A
D
B
D
I
C
E
F
J
G
K
C
E
H
L
H
L
rboles binarios
Izq
Info
Der
+
*
A
^
B
3.5
/
C
NIL
NIL
3.5
NIL
NIL
NIL
D
NIL
NIL NIL
NIL
NIL
37
Crea_arbol(NODO)
1.
Leer informacion(Hacer NODO^.INFO
INFOR)
2.
Escribir existe nodo por izquierda?: 1(Si) 0(No)
3.
Leer respuesta (RESP)
4.
Si RESP es afirmativa entonces
CREA (OTRO)
{crear un nuevo nodo}
Hacer NODO ^.IZQ
OTRO
Regresar a Crea_arbol con NODO ^.IZQ
{llamada recursiva}
si no
Hacer NODO ^.IZQ NIL
6.
{fin condicional del paso 4}
7.
Escribir existe nodo derecha? : 1(Si) 0(No)
8.
Leer respuesta (RESP)
9.
Si respuesta es afirmativa entonces
CREA (OTRO)
{crear un nuevo nodo}
Hacer NODO ^.DER
OTRO
Regresar a Crea_arbol con NODO ^.DER
{llamada recursiva}
si no
Hacer NODO ^.DER NIL
10.
{fin condicional del paso 9}
INORDEN
Recorrer el subarbol izquierdo en inorden.
Examinar la raz.
Recorrer el subarbol derecho en inorden.
39
PREORDEN
Examinar la raz.
Recorrer el subarbol izquierdo en preorden.
recorrer el subarbol derecho en preorden.
POSTORDEN
Recorrer el subarbol izquierdo en postorden.
Recorrer el subarbol derecho en postorden.
Examinar la raz.
40
Ejemplo de recorrido
A
B
D
C
E
PREORDEN:
ABDECFG
INORDEN:
DBEAFCG
POSORDEN:
DEBFGCA
G
+
^
*
A
PREORDEN:
+*AB^/CD3.5
INORDEN:
A*B+C/D^3.5
POSORDEN:
AB*CD/3.5^+
B
C
3.5
/
D
41
Ejemplo de recorrido
A
B
D
G
E
H
F
I
K
PREORDEN:
ABDGKCEHIFJ
INORDEN:
GKDBAHEICFJ
POSORDEN:
KGDBHIEJFCA
Recorrido Preorden
PREORDEN(NODO).
1.
Si NODO NIL entonces
visitar el NODO {escribir NODO^.INFO}
regresar a PREORDEN con NODO^.IZQ
{llamada recursiva a PREORDEN con la
rama izquierda del nodo}
regresar a PREORDEN con NODO^.DER
{llamada recursiva a PREORDEN con la
rama derecha del nodo}
2.
{Fin condicional del paso 1}
Recorrido Inorden
INORDEN(NODO).
1.
Si NODO NIL entonces
2.
Recorrido Postorden
POSTORDEN(NODO).
1.
Si NODO NIL entonces
regresar a POSTORDEN con NODO^.IZQ
{llamada recursiva a POSTORDEN con la rama
izquierda del nodo}
regresar a POSTORDEN con NODO^.DER
{llamada recursiva a POSTORDEN con la rama
derecha del nodo}
visitar el NODO {escribir NODO^.INFO}
2.
{Fin condicional del paso 1}
rboles Binarios de
Bsqueda
46
Reglas a cumplir:
47
Ejemplos de ABB
21
30
33
13
18
25
36
32
40
15
33
21
41
43
5
33
13
17
18
15
25
1
22
2
40
5
33
13
17
18
15
25
1
22
2
40
Implementacin de un ABB
struct nodo
{
int llave;
struct nodo *izq;
struct nodo *der;
};
typedef struct nodo *ABBTree;
51
Insertar en un ABB
void insertar(ABBTree &arbol, int dato)
{
if (arbol==NULL)
{
arbol=(ABBTree)malloc(sizeof(struct nodo));
arbol->izq=NULL;
arbol->der=NULL;
arbol->llave=dato;
}
else
{
if (dato>arbol->llave)
{
insertar(arbol->der,dato);
}
else
{
insertar(arbol->izq,dato);
52
else
{
insertar(arbol->izq,dato);
}
}
}
Reportar
Recorridos
void recorrerEnOrden(ABBTree abb)
{
if(abb!=NULL)
{
recorrerEnOrden(abb->izq);
printf("%i \n",abb->llave);
recorrerEnOrden(abb->der);
}
}
54
Recorridos
void recorrerPreOrden(ABBTree abb)
{
if(abb!=NULL)
{
printf("%i \n",abb->llave);
recorrerEnOrden(abb->izq);
recorrerEnOrden(abb->der);
}
}
55
Recorridos
void recorrerPostOrden(ABBTree abb)
{
if(abb!=NULL)
{
recorrerEnOrden(abb->izq);
recorrerEnOrden(abb->der);
printf("%i \n",abb->llave);
}
}
56
Buscar
int buscar(ABBTree abb, int dato)
{
int resp=0;
if (abb==NULL)
{
resp=0;
}
else
{
if(abb->llave==dato)
{
resp=1;
}
else if (abb->llave<dato)
{
resp=buscar(abb->der,dato);
}
else
{
resp=buscar(abb->izq,dato);
}
}
return resp;
}
57