Professional Documents
Culture Documents
Administracin de Proyectos de desarrollo de Software RBOLES Ciclo de vida de un proyecto Enfoque moderno
Fin de la presentacin
Administracin de Proyectos de desarrollo de Software RBOLES Ciclo de vida de un proyecto Enfoque moderno
RBOLES
Los rboles vistos ahora no tiene un orden definido; sin embargo, los rboles binarios ordenados tienen sentido. Estos se denominan rboles binarios de bsqueda, debido a que se pueden buscar en ellos un trmino utilizando un algoritmo de bsqueda binaria similar al empleado en arreglos. Un rbol binario de bsqueda es aquel que dado un nodo, todos los datos del subrbol izquierdo son menores que los datos de ese nodo, mientras que todos los datos del subrbol derecho son mayores que sus propios datos. El siguiente rbol s es de bsqueda.
RBOLES
5 5 3 0 4 41 75 8 5
4 es menor que 30 30 es menor que 55 41 es mayor que 30 75 es mayor que 55 85 es mayor que 75
Creacin de un rbol binario Supongamos que se desea almacenar los nmeros: 8, 3, 1, 20, 10, 5, 4, en un rbol binario de bsqueda. Siguiendo la regla, dado un nodo en el rbol todos los datos a su izquierda deben ser menores que todos los datos del nodo actual, mientras que todos los datos a la derecha deben
RBOLES
ser mayores que los datos. Inicialmente el rbol esta vaco y se desea insertar el 8. la nica eleccin es almacenar el 8 en el raz, a continuacin viene el 3, ya que 3 es menor que 8, el 3 debe ir en el subrbol izquierdo y as sucesivamente. El rbol binario queda:
8
2 0
1 0
RBOLES
RBOLES
2. Si las claves son iguales, la bsqueda se detiene. 3. Si la clave buscada es mayor que la clave raz, la bsqueda se reanuda en el subrbol derecho. Si la clave buscada es menor que la clave raz, la bsqueda se reanuda con el subrbol izquierdo. Cdigo en C++ de la funcin buscar es:
Nodo *buscar (Nodo *p, int buscado) { if (!p) return 0; else if (buscado == p -> nummat) return p; else if (buscado < p -> nummat) return buscar (p -> izda, buscado); else return buscar (p -> dcha, buscado); }
RBOLES
Insertar un nodo
Una caracterstica fundamental que debe poseer el algoritmo de insercin es que el rbol resultante de una insercin en un rbol de bsqueda ha de ser tambin de bsqueda. En esencia, el algoritmo de insercin se apoya en la localizacin de un elemento, de modo que si se encuentra el elemento (clave) buscado, no es necesario hacer nada; en caso contrario, se inserta el nuevo elemento justo en el lugar donde ha acabado la bsqueda (es decir, en el lugar donde habra estado en el caso de existir). La funcin insertar que pone nuevos nodos es sencilla. Se deben declarar tres apuntadores: un apuntador al raz del rbol y al nuevo nombre y nmero de matricula de la persona.
RBOLES
El procedimiento crear un nuevo nodo para la nueva persona y lo inserta en el lugar correcto en el rbol de modo que el rbol permanezca como binario de bsqueda.
void insertar (Nodo **p, int nuevo_mat, char *nuevo_nombre) { if (!p) p = new nodo (nuevo_mat, nuevo_nombre); else if (nuevo_mat < p-> nummat) insertar (p-> izda, nuevo_mat, nuevo_nombre); else insertar (p-> dcha, nuevo_mat, nuevo_nombre); }
RBOLES
Si el rbol est vaco, es fcil insertar la entrada en el lugar correcto. El nuevo nodo es la raz del rbol y el apuntador p se pone apuntando a ese nodo.
El parmetro p debe ser un parmetro de referencia ya que debe ser ledo y actualizado. Si el rbol no est vaco, se debe elegir entre insertar el nuevo nodo en el subrbol izquierdo o derecho, dependiendo de que el nmero de matricula de la nueva persona sea ms pequeo o mayor que el nmero de matricula en la raz del rbol. La operacin de insercin de un nodo es una extensin de la operacin de bsqueda, los pasos a seguir son:
RBOLES
1.
2. 3.
Eliminacin
RBOLES
1.
2.
Visita a los nodos de un rbol En muchas aplicaciones se desea explorar (recorrer) los nodos de un rbol pero sin tener en cuenta un orden de recorrido preestablecido.
La funcin ContarHojas recorre el rbol y cuenta el nmero de nodos hijo. Para realizar esta operacin se ha de visitar cada nodo comprobando si es un nodo hoja, el recorrido utilizado ser el postorden:
RBOLES
RBOLES
La funcin profundidad utiliza un recorrido postorden para calcular la profundidad de un rbol binario. En cada nodo se calcula la profundidad de los subrboles izquierdo y derecho, la profundidad resultante del nodo es 1 ms que la profundidad mxima de sus subrboles.
// funcin profundidad, recorrido postorden, calcula la profundidad de los subrboles
// izquierdo y derecho de un nodo y devuelve la profundidad como 1 + max (profIzda, // profDcha), la profundidad de un rbol vaco es 0 template <class T> void Profundidad de un rbol (NodoArbol <Y> *t) { int profIzda, profDcho, valorprof; if (t == NULL) valorprof = 0; // Continua
RBOLES