Documentos de Académico
Documentos de Profesional
Documentos de Cultura
B C
B C B C
D Ing. D E Trasviña F
Juan A. Cañedo
Representación de un árbol binario en
la memoria.
Cada noto tiene la siguiente forma:
A D
B C E
Ing. Juan A. Cañedo Trasviña
Clase nodo de un A.B.
class nodo{
nodo izq;
nodo der;
int dato;
public nodo(int x)
{
dato=x;
izq=der=null;
}
} Ing. Juan A. Cañedo Trasviña
Algoritmo para crear un A.B.
Procedimiento crearbol(q:nodo)
escribe(‘Dame el dato=')
leer(q(dato))
mensaje(‘Tiene rama izquierda')
leer(op)
Si op = 'S' Entonces
p=crear nodo()
q(izq) = p
crearbol(p)
En caso contrario
q(izq) = null
mensaje(‘ Tiene rama derecha')
leer(op)
Si op = 'S' Entonces
p=crear nodo()
q(der) =p
crearbol(p)
En caso contrario
Ing. Juan A. Cañedo Trasviña
q(der) = null
Operaciones basicas sobre un árbol
binario
Recorrer árbol ya sea en:
Preorden
Inorden
Postorden
Insertar un nodo
Eliminar un nodo
Buscar nodo con cierta información
Contar nodos
Contar hojas.
Nivel del árbol binario.
Obtener el peso del árbol.
B C
Preorden = ABDGCEHIF
D E F
Inorden.
Postorden.
Ing. Juan A. Cañedo Trasviña
Recorrido en Preorden.
Examinar la raíz (escribe el dato del nodo).
Recorrer el subárbol izquierdo.
Recorrer el subárbol derecho.
B C
Preorden: ABDGCEHIF
D E F
G H I
Ing. Juan A. Cañedo Trasviña
Algoritmo del recorrido en preorden
public void Preorden(nodo p)
{
if (p != null)
{
Console.WriteLine(“Dato={0}”,p.dato);
Preorden(p.izq);
Preorden(p.der);
}
}
Ing. Juan A. Cañedo Trasviña
Recorrido en Inorden (infijo)
Recorre el subárbol izquierdo.
Examinar la raíz (escribe el dato del nodo).
Recorre el subárbol derecho.
B C
Inorden: D G B A H E I C F
D E F
G H I
Ing. Juan A. Cañedo Trasviña
Algoritmo del recorrido en Inorden
public void Inorden(Nodo p)
{
if (p != null)
{
Inorden(p.izq);
Console.WriteLine(“Dato={0}”,p.dato);
Inorden(p.der);
}
}
Ing. Juan A. Cañedo Trasviña
Recorridos en Postorden (postfijo)
Recorre el subárbol izquierdo.
Recorre el subárbol derecho.
Examinar la raíz (escribe el dato del nodo).
B C Postorden : G D B H I E F C A
D E F
B C D
E F G H I J K
L M
E C
F G D
L H
M I
J
Ing. Juan A. Cañedo Trasviña
K
Arboles de expresión aritmética
Una aplicación muy importante de los arboles
es la de poder almacenar una expresión
aritmética en memoria.
Un árbol de expresión es un árbol binario con
las siguientes propiedades:
Cada hoja debe ser un operando.
Los nodos padres deben ser operadores.
Los subárboles son subexpresiones en los
que el nodo raíz es un operador.
Ing. Juan A. Cañedo Trasviña
Ejemplo
Dada la expresion
a*(b+c)+d
* d
a +
b c
Ing. Juan A. Cañedo Trasviña
Árboles Binarios de
Búsqueda (ABB)
Ing. Juan A. Cañedo Trasviña
Árboles Binarios de Búsqueda
Un árbol es un ABB si éste es binario y sus nodos
son subárboles de búsqueda binarios y contienen
información ordenada tal que todos los elementos a
la izquierda de la raíz son menores a la raíz y todos
lo elementos a la derecha de la raíz son mayores a
la raíz.
50
40 90
26 45 110
85
8 34 42 68 88 100 120
95 105
Ing. Juan A. Cañedo Trasviña
102
Clase nodo de un ABB
Class Nodo{
nodo izq;
nodo der;
int dato;
}
120
87 140
99
43 130
22 65
6 6 6
1 1 8 1
8 8
7 9 7 9 9
Ing. Juan A. Cañedo Trasviña
Eliminar un nodo (cont.)
Caso 2
Si el elemento a borrar tiene un solo hijo,
entonces tiene que sustituirlo por el hijo que
esta a su derecha.
1 8 1 8 1 9
9 9
Ing. Juan A. Cañedo Trasviña
Ing. Juan A. Cañedo Trasviña
6 7 7
1 1 8 1 8
8
7 9 9
7 9
Buscar nodo con información
procedimiento busqueda(nodo p; entero llave)
si p != null entonces
si llave != p(dato) entonces
si llave < p(dato) entonces
p <- p(izq)
busqueda( p, llave)
en caso contrario
p <- p(der)
busqueda(p, llave)
en caso contrario
mensaje(’’nodo encontrado’’)
Contar nodos
//cuenta los nodos que hay en el árbol
public static int nodo (nodo raiz)
{
if (raiz == null)
return 0;
else
return (1+ Nodo( raiz.der) + Nodo( raiz.izq))
}
Sumar los nodos
//suma los nodos que hay en el árbol
public static int sumaNodo( nodo raiz)
{
if(raiz == null)
return 0;
else
return (sumaNodo (raiz.der) + sumaNodo
(raiz.izq) )
}
Ing. Juan A. Cañedo Trasviña
Contar hojas.
// Cuenta hojas de un árbol
public int contarHojas (Nodo raiz) {
if (raiz = = null) return 0;
If ((raiz.der == null) && (raiz.izq == null))
return 1;
else
return contarHojas (raiz.izq) + contarHojas (raiz.der)
}