Arboles Binarios
Arboles Binarios
Arboles Binarios
Definiciones:
libro
C1 C2 C3
2.1.1 2.1.2
Partes de un árbol:
Raíz: el nodo inicial o base de una estructura en árbol.
Nodo hoja: el nodo de un árbol que no tiene hijos.
Dos nodos son hermanos si tienen el mismo padre.
Un camino de un nodo N1 a otro Nk se define como la
secuencia de nodos N1, N2,..., Nk tal que Ni es el
padre de Ni+1 para 1 <= i < k.
La longitud de este camino es el número de aristas que
lo forman, k-1.
Existe un camino de longitud cero entre cada nodo y él
mismo. En un árbol hay exactamente un camino entre la
raíz y cada nodo.
Un nodo es antecesor de un segundo si se encuentra
en el camino de la raíz a este.
Un nodo es descendiente de un segundo si se
encuentra en el camino de este a algún nodo hoja.
La profundidad de un nodo es la longitud del camino
único entre la raíz y este.
La altura de un nodo es el camino más largo del nodo a
una hoja. La altura de un árbol es la altura de la raíz.
Ejemplo:
B C D
E F G
H I
Raíz: A
Hojas: E, H, I, G, D.
B es padre de E, F.
F es hijo de B y hermano de E.
Camino de B a I, B—F—I.
Longitud 2.
Profundidad de F 2 y altura 1.
Recorridos:
Recorrido en orden previo o preorden: en este modo de
recorrido, se trabaja en el nodo antes de pasar al
siguiente.
Recorrido en orden posterior o postorden: en este, se
trabaja en cada nodo una vez que ya se ha trabajado
con todos sus hijos y no antes.
Recorrido en orden simétrico o inorden: en esta forma
de recorrido se trabaja en los nodos hoja la primera y
única vez que se pasa por ellos y en el resto de nodos
la segunda vez.
Ejemplo:
2 3 4
5 6 7
8 9 10
Recorrido preorden:
1-2-3-5-8-9-6-10-4-7
Recorrido
postorden:
2-8-9-5-10-6-3-7-4-1
Recorrido
inorden:
2-1-8-5-9-
3-10-6-7-4
G = (V, A)
1 1
6 5
1 1
5
2 5 3 5 4 2 3 4
3 6 4 2 3 4 2
6
5 6 5 6
_ +
12 3 4 1
Inorden: (12 – 3) * (4 + 1)
Montículos:
Ejemplo:
Valor máximo es 10 y se encuentra en la raíz del árbol.
Es un árbol binario completo ya que esta lleno hasta el
penúltimo nivel y en el último nivel tiene los nodos a la
izquierda.
10
8 9
4 5 6 7
2 3
2 8
1 4
Estructura.
{Declaración de tipos}
ELEMENTO = T;
NODO = registro de
Valor: ELEMENTO; {Genérico}
izq: puntero a NODO;
der: puntero a NODO;
fin registro;
/* Implementación en C*/
struct nodo{
int valor;
struct nodo *izq;
struct nodo *der;
};
typedef struct nodo NODO;
Crear árbol.
/*Implementación en C*/
/*separar memoria para un nodo*/
NODO *getnode()
{NODO *p;
p=(NODO*) malloc (sizeof (NODO));
return p;
}
/*Implementación en C*/
/*Implementación en C*/
/*Implementación en C*/
2 8
1 4 7
- Rotación sencilla:
K
k 2
1
K Z K
X
2 1
X Y Y Z
2 8 2 7
1 4 7
1 4 6,5 8
3 6,5
3
- Rotación doble:
4 4
2 6 2 6
1 3 5 7 1 3 55 15
15 7
14 14
K
3
K
2
K
1 K K
3 1
A
K
2 D A B C D
B C
Aplicando la rotación doble al ejemplo nos queda el árbol siguiente:
2 6
1 3 5 14
7 15
Árboles desplegados:
D
p p a
A
x A B C D
B C
x
a
p
p D A
B
C a
x
A B C D