Advertisement
idsystems

SLE_Practica60_Busqueda

Jun 24th, 2024
605
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.34 KB | None | 0 0
  1.  
  2. /* Practica 60
  3.    
  4.     Mediante un árbol binario de búsqueda, almacenar N números aleatorios
  5.    y mostrar el árbol con recorrido en anchura. N es dado por el usuario.
  6. */
  7.  
  8.  
  9. tipos
  10.    Nodo: registro {
  11.     valor: numerico
  12.     izquierdo: numerico
  13.     derecho: numerico
  14.     }
  15.  
  16. var
  17.     arbol: vector [*] Nodo
  18.     raiz, libre, temp, actual, padre, N, numero, i, frente, final: numerico
  19.     opcion, valor: numerico
  20.     cola: vector [*] numerico
  21.     encontrado: logico
  22.  
  23. inicio
  24.     cls()
  25.     raiz = 0
  26.     libre = 1
  27.  
  28.     imprimir("\nIntroduce el número de elementos (N): ")
  29.     leer(N)
  30.    
  31.    dim (arbol, N)
  32.    dim (cola, N)
  33.  
  34.     // Inicializar la lista para el manejo de nodos libres
  35.     desde i=1 hasta N {
  36.         arbol[i].izquierdo = i + 1
  37.     }
  38.     arbol[N].izquierdo = 0
  39.  
  40.  
  41.     // Insertar N números aleatorios en el árbol
  42.     desde i=1 hasta N {
  43.         numero = random(100)  // Generar un número aleatorio entre 1 y 100
  44.  
  45.         // Insertar el número en el árbol
  46.         si (libre == 0) {
  47.             imprimir("\nEl árbol está lleno.")
  48.         sino
  49.             temp = libre
  50.             libre = arbol[libre].izquierdo
  51.  
  52.             arbol[temp].valor = numero
  53.             arbol[temp].izquierdo = 0
  54.             arbol[temp].derecho = 0
  55.  
  56.             si (raiz == 0) {
  57.                 raiz = temp
  58.             sino
  59.                 actual = raiz
  60.                 encontrado = FALSE  // Variable booleana para controlar el bucle
  61.                 repetir
  62.                     padre = actual
  63.                     si (numero < arbol[actual].valor) {
  64.                         actual = arbol[actual].izquierdo
  65.                         si (actual == 0) {
  66.                             arbol[padre].izquierdo = temp
  67.                             encontrado = TRUE  // Se ha encontrado el lugar de inserción
  68.                         }
  69.                     sino
  70.                         actual = arbol[actual].derecho
  71.                         si (actual == 0) {
  72.                             arbol[padre].derecho = temp
  73.                             encontrado = TRUE  // Se ha encontrado el lugar de inserción
  74.                         }
  75.                      }
  76.                 hasta (encontrado)  // El bucle se repetirá hasta que se encuentre un lugar de inserción
  77.             }
  78.         }
  79.     }
  80.  
  81.      // Llamar al procedimiento para mostrar el árbol en anchura
  82.     recorrido_en_anchura()
  83. fin
  84.  
  85.  
  86.  
  87.    // Mostrar el árbol con recorrido en anchura
  88. subrutina recorrido_en_anchura()
  89.  
  90. inicio
  91.         si (raiz == 0) {
  92.             imprimir("\nEl árbol está vacío.")
  93.         sino
  94.             // Inicializar cola
  95.             frente = 1
  96.             final = 1
  97.             cola[frente] = raiz
  98.  
  99.             mientras (frente <= final) {
  100.                 actual = cola[frente]
  101.                 frente = frente + 1
  102.  
  103.                 // Imprimir el valor del nodo actual
  104.                 imprimir("\nValor: ", arbol[actual].valor)
  105.  
  106.                 // Agregar los hijos del nodo actual a la cola
  107.                 si (arbol[actual].izquierdo <> 0) {
  108.                     final = final + 1
  109.                     cola[final] = arbol[actual].izquierdo
  110.                 }
  111.                 si (arbol[actual].derecho <> 0) {
  112.                     final = final + 1
  113.                     cola[final] = arbol[actual].derecho
  114.                 }
  115.             }
  116.         }
  117. fin
  118.  
Tags: Arboles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement