Академический Документы
Профессиональный Документы
Культура Документы
Características:
Formado por una serie de nodos conectados por una serie de aristas
que verifican que:
◦ Tiene un único nodo raíz
◦ Cada nodo, excepto la raíz, tiene un único padre
◦ Existe un único camino (desde la raíz hasta cada nodo)
Subárbol
27/06/2018 Prof. Jeny Castellares / Prof. Carlos Vila 9
Terminología
Grado de un nodo: número de descendientes directos
Grado del árbol: mayor grado de sus nodos
Árbol binario: árbol de grado 2
◦ Cada nodo tiene como mucho dos descendientes directos
Nodos hermanos: Dos o más nodos con el mismo padre se llaman hermanos
Lista = árbol degenerado de grado 1
Altura o profundidad: La altura o profundidad de un árbol es el nivel de la hoja del camino más
largo desde la raíz más uno. Por definición la altura de un árbol vacío es cero. La siguiente figura,
contiene nodos en tres niveles: 0, 1 y 2, su altura es 3.
Padres: A, B, F
Hijos: B, E, F, C, D, G, H, I
Hermanos: {B, E, F}, {C, D}, {G, H, I}
Hojas: C, D, E, G, H, I
camino(A,K) = {A,B,F,K}
B C D
camino(C,K) = {………….}
E F G H
I J K
Raíz
Subárbol Subárbol
izquierdo derecho
Un árbol está perfectamente equilibrado si su equilibrio o balance es cero y sus subárboles son
también perfectamente equilibrados, por lo tanto, el factor de equilibrio de cada nodo puede
tomar los valores -1, 0, +1.
Recorrido en preorden: A, B, D, E, C, F, G
Recorrido en orden (inorden): D, B,E, A, F, C, G
Recorrido en postorden: D, E, B, F, G, C, A
Recorrido en anchura: A, B, C, D, E, F, G
if(raiz == null)
raiz = nuevo;
else {
Nodo anterior = null; // anterior: referencia al padre de aux
Nodo aux = raiz; // aux: auxiliar que va recorriendo los nodos, desde la raiz
if (dato.esMenor(aux.getValor()))
aux = aux.getIzquierdo();
else if(dato.esMayor(aux.getValor()))
aux = aux.getDerecho();
else
throw new Exception("Dato duplicado");
}
if(dato.esMenor(anterior.getValor()))
anterior.setIzquierdo(nuevo);
else
anterior.setDerecho(nuevo);
}
}
if(raiz == null)
return raiz;
else {
Nodo aux = raiz; // aux: auxiliar que va recorriendo los nodos, desde la raiz
return null;
}
}
while(aux != null) {
if(dato.esIgual(aux.getValor())) {
break;
}
antecesor = aux;
if(dato.esMenor(aux.getValor()))
aux = aux.getIzquierdo();
else
aux = aux.getDerecho();
}
if(aux == null)
return false; // dato no encontrado
// 1. Si tiene menos de dos hijos, incluso una hoja, reajustar los enlaces de su antecesor
if(aux.getIzquierdo() == null)
if(aux.getValor().esMenor(antecesor.getValor()))
antecesor.setIzquierdo(aux.getDerecho());
else
antecesor.setDerecho(aux.getDerecho());
aux = null;
return true;
}
// reajuste
if(ant == act)
ant.setIzquierdo(mayor.getIzquierdo());
else
ant.setDerecho(mayor.getIzquierdo());
}
/ 12
* +
+ 8 ^ 8
+ 2 2 3
20 10
10. Diseñar un método iterativo que encuentre el número de nodos hoja en un árbol binario.
11. Escribir un método booleano identicos() que permita decir si dos árboles binarios son
iguales.
12. Construir un método que encuentre el nodo máximo de un árbol binario.
Bibliografía
IS241 – Estructura de Datos