Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Actividad 8 - Lab de Algoritmos Computacionales, Ejercicios de Métodos Computacionales

Actividad 8 - Lab de Algoritmos Computacionales

Tipo: Ejercicios

2024/2025

Subido el 30/05/2025

jordan-emanuel-ruedas-vazquez
jordan-emanuel-ruedas-vazquez 🇲🇽

2 documentos

1 / 13

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Universidad Autónoma de Nuevo León
Facultad de Ingeniería Mecánica y Eléctrica
Laboratorio de Algoritmos Computacionales
Actividad Fundamental 8: Arboles Binarios
Semestre: 3ro
Hora: M1
Grupo: 002
Salón: 1105
Periodo: Enero – Junio
Docente: Ing. Pablo Eusebio De León Cepeda
Nombre: Jordan Emanuel Ruedas Vazquez
Matricula: 2103677
Carrera: ITS
Domingo 18 de Mayo del 2025
Monterrey, Nuevo León
pf3
pf4
pf5
pf8
pf9
pfa
pfd

Vista previa parcial del texto

¡Descarga Actividad 8 - Lab de Algoritmos Computacionales y más Ejercicios en PDF de Métodos Computacionales solo en Docsity!

Universidad Autónoma de Nuevo León Facultad de Ingeniería Mecánica y Eléctrica Laboratorio de Algoritmos Computacionales Actividad Fundamental 8: Arboles Binarios Semestre: 3ro Hora: M Grupo: 002 Salón: 1105 Periodo: Enero – Junio Docente: Ing. Pablo Eusebio De León Cepeda Nombre: Jordan Emanuel Ruedas Vazquez Matricula: 2103677 Carrera: ITS Domingo 18 de Mayo del 202 5 Monterrey, Nuevo León

Contenido

  • Objetivo
  • Introducción
  • Procedimiento
    • Recorrido en Preorden
    • Recorrido en Inorden
    • Recorrido en Postorden
  • Conclusión
  • Referencias Bibliográficas

Introducción Un árbol binario es una estructura de datos jerárquica y no lineal en la que cada nodo puede tener como máximo dos hijos, tradicionalmente denominados hijo izquierdo y hijo derecho. El nodo superior sin padre se conoce como raíz , y los nodos sin hijos, como hojas o nodos terminales. Gracias a su definición recursiva —un árbol binario es un nodo raíz más dos subárboles que a su vez son árboles binarios— esta estructura facilita operaciones eficientes de búsqueda, inserción y recorrido, siendo la base de árboles de búsqueda, montículos y muchas otras estructuras avanzadas. En este contexto, los recorridos o traversals son algoritmos que visitan sistemáticamente todos los nodos del árbol siguiendo reglas específicas. Existen principalmente tres órdenes de recorrido en profundidad ( depth-first traversals ): preorden (Root–Left–Right), inorden (Left–Root–Right) y postorden (Left–Right–Root). Cada uno tiene propiedades y aplicaciones particulares: el preorden es ideal para serializar o clonar la estructura; el inorden imprime los valores de un BST en orden ascendente; y el postorden se usa para liberar memoria o evaluar expresiones en notación postfija. A continuación, profundizamos en cada uno de estos recorridos con ejemplos detallados.

Para profundizar aún más en el estudio de los árboles binarios y sus distintos recorridos, nos adentraremos ahora en las operaciones fundamentales que pueden realizarse sobre ellos. Exploraremos detalladamente cómo buscar un elemento, insertar nuevos nodos, eliminar existentes, recorrer la estructura tanto en profundidad (DFS) como en amplitud (BFS), calcular la altura del árbol, localizar su mínimo y máximo, e incluso equilibrar la estructura mediante rotaciones en árboles autobalanceantes. Cada una de estas operaciones se presentará con pseudocódigo, análisis de complejidad, aplicaciones prácticas y ejemplos concretos, de modo que puedas comprender no solo el “qué” sino también el “cómo” y el “por qué” de su funcionamiento. ❖ Búsqueda La búsqueda en un árbol binario de búsqueda (BST) parte de la raíz y, en cada nodo, compara el valor buscado con la clave del nodo: si es igual, retorna el nodo; si es menor, desciende al subárbol izquierdo; si es mayor, al derecho. Complejidad promedio: O(log n) para árboles balanceados; peor caso: O(n) si el árbol está degenerado. Aplicación: Consultas rápidas en bases de datos en memoria y diccionarios con claves ordenables. ❖ Inserción Para insertar en un BST, se busca la posición de la nueva clave usando la misma lógica de comparación que en búsqueda; al llegar a un nodo nulo, se crea un nuevo nodo con la clave. Complejidad promedio: O(log n); peor caso: O(n). ❖ Eliminación La eliminación de un nodo en un BST implica tres casos:

  1. Hoja: eliminar directamente;
  2. Un solo hijo: reemplazar con el hijo;
  3. Dos hijos: encontrar el sucesor inorden (mínimo del subárbol derecho), copiar su valor y eliminar el sucesor recursivamente. Complejidad: igual a búsqueda e inserción, O(log n) promedio, O(n) peor caso. Uso: mantener índices dinámicos en bases de datos y tablas de símbolos de compiladores. ❖ Recorridos Recorridos en Profundidad (DFS)
  • Preorden (Root–Left–Right), Inorden (Left–Root–Right) y Postorden (Left–Right–Root).
  • Cada uno visita todos los nodos una vez (O(n) tiempo, O(h) espacio recursivo).
  • Aplicaciones: notación prefija/postfija, impresión ordenada de BSTs, liberación de memoria. Recorrido en Amplitud (BFS) Utiliza una cola para visitar nivel por nivel, ideal para encontrar el nivel más superficial que cumple una condición.

Procedimiento Recorrido en Preorden El recorrido en preorden procesa cada nodo antes de sus hijos, siguiendo estrictamente el orden raíz , luego subárbol izquierdo y finalmente subárbol derecho. Este esquema es especialmente útil para clonar o serializar estructuras de árbol, pues al visitar primero la raíz y luego sus descendientes, preserva la jerarquía original en la secuencia de salida. Mediante el preorden, se puede generar la notación prefija (Polish notation) en árboles de expresión, colocando los operadores antes de sus operandos. Por ejemplo, el árbol que representa la expresión (A − B) * (C + D) produce la secuencia * − A B + C D, eliminando la necesidad de paréntesis y facilitando el cálculo en intérpretes de expresiones. Algorítmicamente, la versión recursiva de preorden se expresa así: Preorder(node): if node == null: return visit(node) Preorder(node.left) Preorder(node.right) Cada llamada visita uno de los n nodos exactamente una vez, resultando en complejidad O(n) en tiempo, mientras que el espacio en la pila alcanza O(h), siendo h la altura del árbol. Si se prefiere evitar la recursión, la implementación iterativa usa una pila. Se empuja la raíz, luego en cada iteración se extrae el tope, se visita y se apilan primero el hijo derecho y luego el izquierdo, garantizando que el izquierdo se procese antes que el derecho.

Ejemplo práctico: Propiedades y aplicaciones adicionales:

  1. Ideal para serializar árboles en almacenamiento o transmisión sin perder la estructura.
  2. Base para algoritmos de construcción de árboles a partir de recorridos (ej. reconstruir un árbol con preorden + inorden).
  3. Útil en problemas de copiado profundo de estructuras recursivas en memoria.

Recorrido en Postorden El recorrido en postorden procesa primero el subárbol izquierdo , luego el derecho y finaliza con la raíz. Este orden asegura que todos los descendientes de un nodo se visiten antes que el propio nodo, característica esencial para eliminación de árboles en memoria o cálculo de tamaños de subárboles sin dejar punteros huérfanos. Para generar la notación postfija (Reverse Polish notation) en árboles de expresión, postorden coloca los operadores después de sus operandos, simplificando la evaluación con una pila : la expresión (A − B) * (C + D) se convierte en A B − C D + *. La versión recursiva es: Postorder(node): if node == null: return Postorder(node.left) Postorder(node.right) visit(node) Con tiempo O(n) y espacio O(h) de pila, y alternativas iterativas que emplean dos pilas o marcas de nodos para simular la recursión y producir exactamente el mismo orden. Ejemplo detallado: Aplicaciones clave:

  1. Liberación de memoria en estructuras dinámicas, protegiendo integridad de punteros.
  2. Evaluación de expresiones en intérpretes y compiladores sin paréntesis usando notación postfija.
  3. Calculadoras de tamaños y métricas de árbol, procesando primero subárboles y luego acumulando resultados en la raíz.

En conjunto, estos tres recorridos profundos ofrecen herramientas versátiles para todo tipo de operaciones sobre árboles binarios : generación de notaciones de expresiones, ordenamiento implícito, gestión de memoria y construcción de estructuras. La elección del método dependerá del propósito (copiado, búsqueda ordenada, eliminación), la forma del árbol (balanceado o degenerado) y los requisitos de espacio y robustez de la implementación.

Referencias Bibliográficas GeeksforGeeks. Binary Tree Data Structure. Recuperado el 18 de mayo de 2025, de https://www.geeksforgeeks.org/binary-tree-data-structure/ GeeksforGeeks. Binary Search Tree Operations. Recuperado el 18 de mayo de 2025, de https://www.geeksforgeeks.org/binary-search-tree-data-structure/ W3Schools. Binary Search Trees. Recuperado el 18 de mayo de 2025, de https://www.w3schools.com/dsa/dsa_data_binarysearchtrees.php Stack Overflow. Inserting into a Binary Tree Recursively. Recuperado el 18 de mayo de 2025, de https://stackoverflow.com/questions/61167982/inserting-into-a-binary-tree-geeksforgeeks-recursively Wikipedia. AVL Tree. Recuperado el 18 de mayo de 2025, de https://en.wikipedia.org/wiki/AVL_tree TutorialsPoint. (2025). Tree Traversals in Data Structure. Recuperado el 18 de mayo de 2025, de https://www.tutorialspoint.com/data_structures_algorithms/tree_traversal.htm W3Schools. (2025). DSA Pre-order Traversal. Recuperado el 18 de mayo de 2025, de https://www.w3schools.com/dsa/dsa_algo_binarytrees_preorder.php GeeksforGeeks. (2025). Inorder Traversal of Binary Tree. Recuperado el 18 de mayo de 2025, de https://www.geeksforgeeks.org/inorder-traversal-of-binary-tree/ GeeksforGeeks. (2025). Postorder Traversal of Binary Tree. Recuperado el 18 de mayo de 2025, de https://www.geeksforgeeks.org/postorder-traversal-of-binary-tree/