Está en la página 1de 16

Laboratorio de Algoritmos y Estructuras de Datos

Página 2 de 14

Alumno(s) Nota

Maucaylle Quispe Cintia


Grupo A
Ciclo III
Fecha de entrega 14/10/2022
Laboratorio de Algoritmos y Estructuras de Datos
Página 1 de 14

I.- OBJETIVOS:
 Implementar recorridos en árboles binarios
 Realizar operaciones en recorridos de árboles binarios.

II.- SEGURIDAD:
Advertencia:
En este laboratorio está prohibida la manipulación del
hardware, conexiones eléctricas o de red; así como la
ingestión de alimentos o bebidas.

III.- FUNDAMENTO TEÓRICO:


 Revisar el texto guía que está en el campus Virtual.

IV.- NORMAS EMPLEADAS:


 No aplica

V.- RECURSOS:
 En este laboratorio cada alumno trabajará con un equipo con Windows 10.

VI.- METODOLOGÍA PARA EL DESARROLLO DE LA TAREA:


 El desarrollo del laboratorio es individual.

VII.- PROCEDIMIENTO:

1. Recorridos de arboles binarios

- Pre Order Traversal. ( PreOrderTraversal.py).  D.L.R.


Laboratorio de Algoritmos y Estructuras de Datos
Página 2 de 14

Preorder transversal
(DLR), en la imagen se
muestra un tipo de
recorrido de árbol binario,
que se puede registrar
como la raíz izquierda y
derecha. Este recorrido de
preorden visita primero al
nodo raíz que en este caso
es estudiante, luego
atraviesa el subárbol
izaquierdo, pero como
vemos en la captura solo
hay unos dos subárboles
por lo cual extrae
aprobado, y finalmente
extrae el derecho.
Por lo cual el resultado
quedaría así:
Estudiante, Aprobado,
desaprobado.

- In Order Traversal. ( InOrderTraversal.py).  L.D.R.


Laboratorio de Algoritmos y Estructuras de Datos
Página 3 de 14

Inorder transversal, en
esta captura muestra el
recorrido primero se
visita el subárbol
izquierdo que en este caso
seria Aprobado, luego al
ver que ya no tiene
izquierdas vuelve y extrae
estudiante, y al final
desaprobado cumpliendo
así un recorrido inorder.
Laboratorio de Algoritmos y Estructuras de Datos
Página 4 de 14

- Post Order Traversal. ( PostOrderTraversal.py)  L.R.D.


Laboratorio de Algoritmos y Estructuras de Datos
Página 5 de 14

En esta imagen se
muestra el resultad de
un recorrido Post order
travesal donde primero
nos movemos al
subárbol izquierdo y
luego al subárbol
derecho. Después de
mover imprime los
datos del nodo. Dando
como resultado en este
caso Aprobado,
desaprobado y
estudiante.

Ejercicios : Construir los árboles propuesta y su recorrido indicado.

'''
Binary Tree : Preorder Traversal

1
|
----------------------
| |
2 3
| |
---------- ------------
| | | |
4 5 6 7

--> 1 2 4 5 3 6 7
'''
Laboratorio de Algoritmos y Estructuras de Datos
Página 6 de 14
Laboratorio de Algoritmos y Estructuras de Datos
Página 7 de 14

'''
Binary Tree : Inorder Traversal

1
|
----------------------
| |
2 3
| |
---------- ------------
| | | |
4 5 6 7

--> 4 2 5 1 6 3 7
'''
Laboratorio de Algoritmos y Estructuras de Datos
Página 8 de 14
Laboratorio de Algoritmos y Estructuras de Datos
Página 9 de 14

'''
Binary Tree : Postorder Traversal

1
|
----------------------
| |
2 3
| |
---------- ------------
| | | |
4 5 6 7

--> 4 5 2 6 7 3 1
'''
Laboratorio de Algoritmos y Estructuras de Datos
Página 10 de 14
Laboratorio de Algoritmos y Estructuras de Datos
Página 11 de 14

2. Encontrar el valor máximo y mínimo de un árbol


Laboratorio de Algoritmos y Estructuras de Datos
Página 12 de 14

En el siguiente ejercicio , construir el arbol y encontrar el máximo y minimo valor

3. Encontrar un valor en un árbol (este ejercicio necesita la clase BinaryTreeNode)

'''
Created on Mar 11, 2019
@author: jgomezm
@version: 1.2 April 29,2020
'''
class BinaryTreeNode:
Laboratorio de Algoritmos y Estructuras de Datos
Página 13 de 14

def __init__(self, data, left = None, right = None):


self.data = data # value node
self.left = left # left child
self.right = right # right child

#
def findDataRecursive(root, dataSearch, nro_times=0):

if root == None:
return nro_times

tmp_nro_times = nro_times

if root.data == dataSearch:
tmp_nro_times +=1

return tmp_nro_times + \
findDataRecursive(root.left, dataSearch, nro_times) + \
findDataRecursive(root.right, dataSearch, nro_times)

#
#
# Resolution
# 1
# 2 3
# 7 5 6 7

root = BinaryTreeNode(1)
root.left = BinaryTreeNode(2)
root.right = BinaryTreeNode(3)
root.left.left = BinaryTreeNode(7)
root.left.right = BinaryTreeNode(5)
root.right.left = BinaryTreeNode(6)
root.right.right = BinaryTreeNode(7)

dataSearch = 7
nro_times = findDataRecursive(root, dataSearch)
print("Se encontro el valor de %d, %d veces" % (dataSearch, nro_times))

- Buscar el número 10 ¿Lo encuentra? ¿Qué devuelve la función de búsqueda?

4. Calcular la suma de datos de un árbol (este ejercicio necesita la clase BinaryTreeNode)

def sumRecursive(root):
if (root == None):
return 0
return root.data + \
sumRecursive(root.left) + \
sumRecursive(root.right)
Laboratorio de Algoritmos y Estructuras de Datos
Página 14 de 14

#
# Resolution
# 1
# 2 3
# 7 5 6 7

root = BinaryTreeNode(1)
root.left = BinaryTreeNode(2)
root.right = BinaryTreeNode(3)
root.left.left = BinaryTreeNode(7)
root.left.right = BinaryTreeNode(5)
root.right.left = BinaryTreeNode(6)
root.right.right = BinaryTreeNode(7)

tmp = sumRecursive(root)
print("La suma del arbol es %d" % (tmp))

Ejercicios propuestos : para el árbol dado :

#
# Resolution
# 1
# 2 3
# 7 5 6 7

- Calcular la suma de los números pares de árbol siguiente


- Calcular la suma de los elementos que están en los nodos izquierdos. No considerar la raíz
principal como un elemento que esta a la izquierda.

CONCLUSIONES:
1.
2.
3.

También podría gustarte