1
ARBOLES
1. Definición.
2. Conceptos Generales.
3. Arboles Binarios.
3.1 Definición.
3.2 Implementación.
3.3 Recorrido.
3.4 Árboles Binarios de Búsqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.
3.5 Árboles de Expresión.
o Construcción.
o Evaluación.
1. Ejemplos
2
. Definición.
. Conceptos Generales.
. Arboles Binarios.
B C
D E F G H
I J K L
3
. Definición.
. Conceptos Generales.
. Arboles Binarios.
4
. Definición.
. Conceptos Generales.
. Arboles Binarios.
( ( A + B ) / ( C – D) ) * ( E - F )
/ -
+ - E F
A B C D
5
. Definición.
. Conceptos Generales.
. Arboles Binarios.
6
. Definición.
. Conceptos Generales.
. Arboles Binarios.
Altura: la altura de un árbol se define como el nivel del nodo de mayor nivel. Como cada
nodo de un árbol puede considerarse a su vez como la raíz de un árbol, también
podemos hablar de altura de ramas. El árbol del ejemplo tiene altura 3, la rama 'B' tiene
altura 2, la rama 'H' tiene altura 1, la 'G' cero, etc.
7
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
A A A
B B B
C C C
8
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IMPLEMENTACION DE LISTAS SIMPLES
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
Lista 101
struct tipo_datos : INFO
{ char nombre[20]; 124
int cedula, edad; 125 SIG (151)
};
typedef tipo_ datos tipo_info 151
: INFO
struct tipo_nodo 174
{ tipo_info Info; 175 SIG (201)
tipo_nodo * Sig;
};
201
: INFO
typedef tipo_nodo* pt_nodo; 224
225 SIG (301)
pt_nodo Lista;
301
: INFO
324
325 SIG (NULL)
9
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IMPLEMENTACION DE ARBOLES
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
RAIZ 101
struct tipo_datos :
INFO
{ char nombre[20]; 124 Izq (151)
int cedula, edad; 125 Der (201)
};
typedef int
tipo_
TipoInfo
datos TipoInfo 151
INFO
:
struct TipoNodo 174 Izq (301)
{ TipoInfo Info; 175 Der(NULL)
TipoNodo * Izq, *Der;
};
201
INFO
:
typedef TipoNodo* PtNodo; 224 Izq (NULL)
225 Der (NULL)
PtNodo RAIZ;
301
INFO
:
324 Izq (NULL)
325 Der (NULL)
10
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
5 6 10 12 14 20 22 28 30 31 33 35 50 65 88
Lineal 5 S 6 S 10 S 12 S 14 S 65 S 88 S
I 28 D
Jerárquica
I 20 D I 33 D
6 D
I 12 I 22 D I 31 D I 65 D
6 D
I 10 6 D
I 14 I 30 D I 50 D I 88 D
I 6 D
I 5 D
11
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
I 28 D
I 20 D I 33 D
I 12
6 D I 22 D I 31 D I 65 D
I 10
6 D I 14
6 D I 30 D I 50 D I 88 D
I 6 D
28
I 5 D
20 33
12 22 31 65
10 14 30 50 88
22
22 12
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda (ABB).
3.5 Arboles de Expresion.
28
20 33
12 22 31 65
10 14 30 50 88
N
(1) nodo - subárbol izquierdo - subárbol derecho
PRE - ORDEN I D
N
(2) subárbol izquierdo - nodo - subárbol derecho
IN - ORDEN I D
N
(3) subárbol izquierdo - subárbol derecho - nodo
POST - ORDEN I D
14
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. IN - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17
25 8
4 12 20 32
1 6 10
1 4 6 25 10 12 17 20 8 32
15
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. PRE - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17
25 8
4 12 20 32
1 6 10
17 25 4 1 6 12 10 8 20 32
16
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion. POST - ORDEN
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
N
(ABB).
3.5 Arboles de Expresion.
I D
17
25 8
4 12 20 32
1 6 10
1 6 4 10 12 25 20 32 8 17
17
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion.
17
25 8
4 12 20 32
1 6 10
PRE 17 25 4 1 6 12 10 8 20 32
IN 1 4 6 25 10 12 17 20 8 32
POST 1 6 4 10 12 25 20 32 8 17
18
3. ARBOLES BINARIOS
Dados los recorridos, dibujar el ABB que los
3.1 Definicion.
3.2 Implementacion. genera:
3.3 Recorrido. In_Orden: 4,11,39,49,51,58,73,80,86,90 -
3.4 Arboles Binarios de Busqueda
(ABB). Pre_Orden: 39,4,11,90,58,49,51,80,73,86
3.5 Arboles de Expresion.
N N
39
I D I D
IN - ORDEN PRE - ORDEN
4,114 90
49,51,58,73,80,86,90
NULL 11 49,51,58,73,80,86
58 NULL
49
49,51 80
73,80,86
NULL 51 73 86
19
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion.
void RecInorden(PtNodo RAIZ)
{ if(RAIZ!=NULL)
Recorrido INORDEN.- { RecInorden (RAIZ->Izq);
cout<<RAIZ->Info;
RecInorden (RAIZ->Der);
}
void RecPreorden(PtNodo RAIZ) }
{ if(RAIZ!=NULL)
{ cout<<RAIZ->Info;
RecPreorden (RAIZ->Izq); Recorrido PREORDEN.-
RecPreorden (RAIZ->Der);
}
}
void RecPostorden(PtNodo RAIZ)
{ if(RAIZ!=NULL)
{ RecPostorden (RAIZ->Izq);
RecPostorden (RAIZ->Der);
Recorrido POSTORDEN.- cout<<" "<<RAIZ->Info;
}
}
20
3. ARBOLES BINARIOS
3.1 Definicion.
3.2 Implementacion.
3.3 Recorrido.
3.4 Arboles Binarios de Busqueda
(ABB).
3.5 Arboles de Expresion. 17
void RecInorden(PtNodo RAIZ)
{ if(RAIZ!=NULL) 25 8
{ RecInorden (RAIZ->Izq);
cout<<RAIZ->Info; 4 12 20 32
RecInorden (RAIZ->Der);
1 6 10
}
}
Un Arbol Binario de Búsqueda (ABB) es aquel que, para cualquier nodo del
arbol (N) se cumple que, todos los nodos del sub-árbol izquierdo son menores
que N->Info, mientras que los nodos del sub-árbol derecho son mayores que N-
>Info
17
14 25
4 16 20 32
1 6 15
22
3.4 Arboles Binarios de Búsqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. TipoNodo * Izq, *Der;
};
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;
NULL
NULL
Info
Der
RAIZ->Izq=NULL;
17
Izq
RAIZ->Der=NULL;
return 0;
}
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
23
3.4 Arboles Binarios de Busqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. Elem=14 TipoNodo * Izq, *Der;
};
RAIZ=RAIZ->Izq
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;
NULL
NULL
RAIZ->Izq=NULL;
17
d2
RAIZ->Der=NULL;
return 0;
d2
}
NULL
NULL
Info
Der
Izq
14
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
24
3.4 Arboles Binarios de Busqueda (ABB). typedef int TipoInfo
o Inserción de un nodo. struct TipoNodo
o Búsqueda de un nodo. { TipoInfo Info;
o Eliminación de un nodo. Elem=25 TipoNodo * Izq, *Der;
};
RAIZ=RAIZ->Der
typedef TipoNodo* PtNodo;
int INSERTAR(PtNodo &RAIZ, TipoInfo ELEM) PtNodo RAIZ;
{ if(RAIZ==NULL)
Raiz
{ RAIZ=new(TipoNodo);
if(RAIZ!=NULL)
d1
{ RAIZ->Info=ELEM;
NULL
RAIZ->Izq=NULL;
17
d2
d3
RAIZ->Der=NULL;
return 0;
d2 d3
}
NULL
NULL
NULL
NULL
Info
Info
Der
Der
Izq
Izq
14
25
else return 1;
}
else if(ELEM>RAIZ->Info)
return INSERTAR(RAIZ->Der,ELEM);
else if(ELEM<RAIZ->Info)
return INSERTAR(RAIZ->Izq,ELEM);
else return 1;
}
25
3.4 Arboles Binarios de Busqueda (ABB).
o Insercion de un nodo.
o Busqueda de un nodo.
o Eliminacion de un nodo.
14 25
4 16 20 32
1 6 15
RETURN(RAIZ)
26
3.4 Arboles Binarios de Busqueda (ABB). PtNodo BUSCAR(PtNodo RAIZ, TipoInfo ELEM)
o Insercion de un nodo. { if(RAIZ!=NULL)
{ if(RAIZ->Info==ELEM) return RAIZ;
o Busqueda de un nodo.
else if(ELEM < RAIZ->Info)
o Eliminacion de un nodo. return BUSCAR(RAIZ->Izq,ELEM);
else return BUSCAR(RAIZ->Der,ELEM);
Raiz }
else return NULL;
d1 }
17 d2d3
d2 d3
14 d4d5 25 d6d7
d4 d5 d6 d7
4 d8d9 16 d10N 20 N N 32 N N
d8 d9 d10
1 N N 6 N N 15 N N
BUSCAR(RAIZ->Der->Izq, 20)
if(20==20) return RAIZ->Der->Izq;
27
3.4 Arboles Binarios de Busqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.
Borrar 16
17
Borrar 1 14 PADRE
PADRE 25
4 16
15 20 32
1 6 15 HIJO
28
3.4 Arboles Binarios de Busqueda (ABB).
o Inserción de un nodo.
o Búsqueda de un nodo.
o Eliminación de un nodo.
Borrar 34
70
34
28
Menor de los menores
Mayor mayores = 70
28
18 90
6 25 70 100
20 28
29
3.4 Arboles Binarios de Busqueda (ABB). void ELIM(PtNodo &R, TipoInfo X)
o Inserción de un nodo. { PtNodo Q;
if(R==NULL) cout<<"NO EXISTE VALOR";
o Búsqueda de un nodo.
else if(X<R->Info) ELIM(R->Izq,X);
o Eliminación de un nodo. else if(X>R->Info) ELIM(R->Der,X);
else
R { Q=R;
if(Q->Der==NULL) R=Q->Izq;
d1
else if(Q->Izq==NULL) R=Q->Der;
34 I D else REEMP(Q->Izq,Q);
delete(Q); }
}
d2 d3
void REEMP(PtNodo &P, PtNodo &Q)
18 d4d5
N 90 N d6 { if(P->Der!=NULL) REEMP(P->Der,Q);
Q else
d4 d5 d6 { Q->Info=P->Info;
Q=P;
6 N N 25 d7d8 100 N N
P=P->Izq; }
}
d7 d8
20 N N 28 N N
32
3.5 Arboles de Expresion. Los árboles binarios se utilizan para representar/evaluar
o Construcción. expresiones. Las expresiones contienen básicamente operadores y
o Evaluación. operandos, se puede representar por un árbol binario donde la raíz
contiene el operador y los subárboles izquierdo/derecho contienen
los operandos. Cada operando puede ser una variable (A…Z) o una
subexpresión representada por un subárbol.
A* ( ( B + C ) / D ) + (E - F)
OPERADOR
+
A* ( ( B + C ) / D )
A* ( ( B + C ) / D )
*
OPERANDO
A*((B+C)/D) OPERANDO
(E - F)
A (B+C)/D
/ E F
B+C
+ D
B C
33
3.5 Arboles de Expresion.
o Construcción.
o Evaluación. La evaluación de una expresión usando árboles binarios tiene
tres pasos:
1. Transformar la expresión de In_Fija a Post_Fija.
2. Construir a partir de la expresión en Post_Fija el Arbol de
Expresión.
3. Evaluar la expresión utilizando el árbol construido.
34
3.5 Arboles de Expresion.
o Construcción.
o Evaluación.
PtNodoAr CrearNodo(PtNodoAr Izq, PtNodoAr Der, TInfoAr Elem)
{ PtNodoAr Aux;
Aux=new(TipoNodo);
Aux->Info=Elem; ALGORITMO:
Aux->Izq=Izq; 1. Se lee la expresión de izquierda a
Aux->Der=Der; derecha, carácter por carácter.
return Aux;
2. Si carácter leído es operador
}
(A..Z), se crea el nodo y se guarda
PtNodoAr CrearArbol(PtNodoEx Exp) su dirección en una pila.
{ PtNodoAr A1=NULL,A2=NULL,A3=NULL;
PtNodoPi P; 3. Si carácter es operando se extraen
while(Exp!=NULL) los dos últimos nodos de la pila, se
{ if(isalpha(Exp->Info)) crea el nodo para el operando, y
{ A3=CrearNodo(NULL,NULL,Exp->Info); se conectan los punteros izq/der
PUSH(P,A3); } con las direcciones extraídas de la
else pila.
4. Se mete en la pila la dirección del
{ POP(P,A2);
nodo que contiene el operando
POP(P,A1);
A3=CrearNodo(A1,A2,Exp->Info);
PUSH(P,A3); }
Exp=Exp->Sig;
}
POP(P,A3);
return A3;
}
35
3.5 Arboles de Expresion.
o Construcción.
o Evaluación. Raiz d1
float EVAL(PtNodoAr R)
* d2d3
float EVAL(PtNodoAr R)
* d2d3