Está en la página 1de 4

INFORME 3 DE ESTRUCTURA DE DATOS Y ALGORITMOS

Implementacin de rbol binario y Max Heap:


Christopher Arancibia 201510011-k
Carlos Martnez 201510015-2
Nicols Gonzlez 201510003-9

Pregunta 1 (rbol Binario):


pnodo creanodo(int valor):

En esta funcin se crea un nodo nuevo para ser utilizado en las otras funciones, en
el desarrollo, se le da al nodo el valor que ingres el usuario y dos punteros que se
mandan a NULL, uno a la derecha y otro a la izquierda.
pnodo insert(int valor, pnodo rbol):
En esta funcin insert , que se ingresa como argumentos el valor que se desea insertar,
y el rbol determinado a cual se agregar, primero se llama a la funcin creanodo para
crea el nodo del elemento, luego siempre y cuando el rbol exista se ingresara al ciclo
while sin condiciones, ya que en el caso contrario se ingresara el nuevo nodo
inmediatamente como raz. En el While se analizara si el elemento a ingresar ser a la
derecha o a la izquierda de su antecesor, en el caso que este los dos ocupados se
cambiar el valor de la variable rbol a la direccin que le corresponda
respectivamente, cuando se agregue el nuevo elemento a su posicin, se saldr del ciclo
con un break para que finalmente se retorne el rbol con los respectivos cambios.
Ejemplo:

Si se ingresa como argumento el valor 6 y el rbol en que estamos


trabajando es:

rbol= 9, como el 6 es menor que rbol se agregar a la


izquierda de este, pero como no es NULL el siguiente
puntero la variable rbol pasa ser el 5, nuevamente se
compara y como el 6 es mayor que el rbol y adems su
puntero de la derecha del 5 es NULL se agrega en esta
direccin .

9
5

12

Retornando:
9->5->6->12

bool search(int valor, pnodo arbol, int nivel):


La funcin search, busca y retorna si el elemento que fue ingresado por el usuario se
encuentra o no en el rbol mediante a reiteraciones de esta. Adems la funcin indica
en qu nivel se encuentra y las etapas con los respectivos valores en cual busc.
Primero se analiza si el rbol que se ingres como argumento es NULL, al ser as se
retornar false, sino ingresar a otro if, el cual compara si el elemento en el cual se
encuentra recorriendo es igual al valor que se busca, en el caso que s sean iguales se
imprimir en la pantalla un mensaje de afirmacin y retornar true. Si no entra en
ninguno de los dos if, se llamar nuevamente a la funcin search, pero se cambia el
valor de la variable rbol, primero el siguiente elemento que est apuntando hacia la
izquierda y luego hacia la derecha. Como la funcin trabaja de una manera reiterativa,
se pude recorrer todos los elementos del rbol (de izquierda a derecha) permitiendo
buscar el elemento deseado. Si no lo encuentra dentro de todas las reiteraciones (es
decir que todas retornaran false) si imprime en la pantalla un mensaje negativo de la
bsqueda. En cada reiteracin se le suma uno a la variable nivel que entra como
argumento para indicar el nivel y el nodo en que estamos recorriendo.
Ejemplo:

Si se ingresa como argumento el valor 12 y el rbol en que estamos


trabajando es :
9
5

12

rbol= 9, como el elemento no es NULL ni tampoco el que


buscamos llamamos nuevamente la funcin search, pero
ahora comparamos el 5(nuevo rbol) , como tampoco
cumple con la condiciones, se llama al siguiente, pero el
siguiente es NULL, por lo tanto se retorna false y se vuelve a
la reiteracin del nodo 5, pero ahora recorre hacia la
derecha , el cual tambin es NULL, entonces vuelve al nodo
9, recorriendo ahora su derecha, donde si se encuentra el
elemento. Entonces finalmente retornara en la pantalla:
Nivel 1: el nodo contiene el valor: 9
Nivel 2: el nodo contiene el valor:5
si se encontr el valor en el Nivel :2.

void mostrar_arbol(pnodo arbol)

La funcin mostrar_arbol nos permite ver como estn distribuidos en forma Pre
orden travesal los elementos del rbol que se ingresa como argumento, tambin de
una manera reiterativa como la funcin anterior. Se irn mostrando en la pantalla
cada elemento desde la izquierda hacia la derecha del rbol( a partir de la raz),
cuando llegue al siguiente del ltimo elemento de la ramificacin, el cual sera NULL
, la funcin retornar false, por lo tanto vuelve al nodo anterior pero recorriendo
ahora su derecha, y as reiteradamente hasta que se recorra por completo.
Ejemplo:
Si el rbol que se ingresa como argumento es el de los ejemplos anteriores, en la
imprimira:
Enpantalla
el primerse
paso
rbol =9, se dirige hacia su izquierda
rbol = 5, se dirige hacia su izquierda
rbol=NULL, se vuelve al nodo 5 pero recorriendo su derecha,
donde tambin es NULL, por lo tanto se vuelve a la reiteracin
de la derecha del 9
rbol=12, donde su puntero
tanto de la derecha como la izquierda es NULL.
Por lo tanto se imprime en la pantalla:
9->5->12

Int men()
La funcion extra "menu" imprime texto en pantalla y hace el usuario escoger una de
las opciones mostradas, si el valor ingresado por el usuario no corresponde a alguna
de las opciones, se le pedir volver a ingresar un valor. Al final retornara la opcin
escogida (ya validada anteriormente en un bucle).
int main()
En el main se crear un rbol predeterminado, este se compondr por 10
elementos(los cuales sern ingresados por el usuario) con dos punteros cada uno,
uno hacia la derecha y otro a la izquierda, luego se le mostrara al usuario un men
con las distintas funciones(insertar o buscar), de las cuales deber escoger una
para implementar hacia el rbol o cerrar el programa.

Preguna 2.i
array<int, 10>crear()

Funcin que crea un array de 10 elementos y lo llena con un valor por defecto. Este
valor servir posteriormente para verificar que un espacio del array este vaco.
Esta funcin siempre retornar el array {-99, -99, -99, -99, -99, -99, -99,
-99, -99, -99}.
array<int, 10>insert(array<int, 10>arbol, int valor)
Esta funcin recibe el rbol y el valor a insertar en l. Se determina en que ndice
debe insertarse el valor, verificando que esto sea posible, luego se procede a
determinar los ndices que se deben recorrer, guardndolos en un vector creado
previamente y finalmente se procede a recorrer estos ndices, mientras se van
ordenando como un max heap.
Adems se determina el tiempo de ejecucin de la funcin y se muestra en pantalla.
Ejemplo: Si se tiene el array {23, 14, 21, -99, -99, -99, -99, -99, -99, -99} y
se inserta el valor 31, se retornar el nuevo array {31, 23, 21, 14, -99, -99,
-99, -99, -99, -99}.
int menu(int numero)
Funcin extra que pide al usuario ingresar valores para insertar. Valida que el
nmero ingresado sea distinto al utilizado para espacios vacos y se retorna un valor
valido. La variable "numero" solo sirve para mejorar la esttica del programa.
Ejemplo: Si se ingresa como argumento el nmero 3, se imprimir en
pantalla:
Ingrese valor numero 3 a insertar (distinto de -99):
Si el usuario ingresa -99, se le volver a pedir que ingrese un nmero. Si
el usuario ingresa el valor 45, la funcin retornar 45.

void mostrar(array<int, 10>arbol)


Funcin extra que muestra el rbol segn el mtodo de level order.
Ejemplo: Si se ingresa el array {43, 21, 32, 18, 19, 30, 27, -99, -99, -99} se
mostrar en pantalla lo siguiente:
43-> 21-> 32-> 18-> 19-> 30-> 27->

Preguna 2.ii
void main()
En el main de este programa se realizar todo sin el uso de funciones externas. En
primer lugar se define una variable para medir el tiempo de ejecucin del
programa, luego se inicializa un vector llamado myvector, se declara una variable
de tipo entero y se crea un bucle con el fin de ingresar valores de tipo entero al
vector. Una vez que el elemento se encuentre en este, se usar la funcin
make_heap para crear el rbol (Max Heap )con los valores del vector, el cual ingresa
cada elemento al rbol de izquierda a derecha, junto a eso a medida que se integra,
se compara con sus ancestros para obtener su posicin correspondiente. Una vez
finalizado el rbol, la variable de tiempo dejara de funcionar, dando a mostrar as el
tiempo de ejecucin del programa (impreso en pantalla), siguiendo con otro bucle
para mostrar los elementos del vector. Se ha usado una funcin system(pause)
para detener la pantalla, con el propsito de visualizar el resultado sin que esta se
cierre.
24->23->20->21->22->16->19->15>18->17->

También podría gustarte