Advertisement
idsystems

SLE_Practica63_ArbolBinarioBusqueda

Jun 24th, 2024
625
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.78 KB | None | 0 0
  1. /* Practica 63
  2.     Mostrar la raíz del árbol binario de búsqueda en el que se almacenaron
  3.    N números aleatorios y son controlados mediante el siguiente menú:
  4.  
  5.    1.   Insertar
  6.    2.   Eliminar
  7.    3.   Mostrar Raiz
  8.    4.   Salir
  9.  
  10. */
  11.  
  12. tipos
  13.    Nodo: registro {
  14.     valor: numerico
  15.     izquierdo: numerico
  16.     derecho: numerico
  17.    }
  18.  
  19. var
  20.     arbol: vector [100] Nodo
  21.     raiz, libre, temp, actual, padre, i, opcion, valor, reemplazo, hijo, padre_reemplazo: numerico
  22.     encontrado: logico
  23.  
  24. inicio
  25.    cls()
  26.     raiz = 0
  27.     libre = 1
  28.  
  29.     // Inicializar la lista para el manejo de nodos libres
  30.     desde i=1 hasta 99 {
  31.         arbol[i].izquierdo = i + 1
  32.     }
  33.     arbol[100].izquierdo = 0
  34.  
  35.     repetir
  36.         imprimir("\nMenú:")
  37.         imprimir("\n1. Insertar")
  38.         imprimir("\n2. Eliminar")
  39.         imprimir("\n3. Mostrar Raíz")
  40.         imprimir("\n4. Salir")
  41.         imprimir("\nElija una opción: ")
  42.         leer(opcion)
  43.  
  44.         eval {
  45.             caso (opcion ==1)
  46.                 // Insertar
  47.                 si (libre == 0) {
  48.                     imprimir("\nEl árbol está lleno.")
  49.                 sino
  50.                     temp = libre
  51.                     libre = arbol[libre].izquierdo
  52.  
  53.                     imprimir("\nIntroduce el número a insertar: ")
  54.                     leer(valor)
  55.  
  56.                     arbol[temp].valor = valor
  57.                     arbol[temp].izquierdo = 0
  58.                     arbol[temp].derecho = 0
  59.  
  60.                     si (raiz == 0) {
  61.                         raiz = temp
  62.                     sino
  63.                         actual = raiz
  64.                         encontrado = FALSE
  65.                         repetir
  66.                             padre = actual
  67.                             si (valor < arbol[actual].valor) {
  68.                                 actual = arbol[actual].izquierdo
  69.                                 si (actual == 0) {
  70.                                     arbol[padre].izquierdo = temp
  71.                                     encontrado = TRUE
  72.                                 }
  73.                             sino
  74.                                 actual = arbol[actual].derecho
  75.                                 si (actual == 0) {
  76.                                     arbol[padre].derecho = temp
  77.                                     encontrado = TRUE
  78.                                 }
  79.                             }
  80.                         hasta (encontrado)
  81.                     }
  82.                 }
  83.                 //romper
  84.  
  85.             caso (opcion ==2)
  86.                 // Eliminar
  87.                 imprimir("\nIntroduce el número a eliminar: ")
  88.                 leer(valor)
  89.  
  90.                 actual = raiz
  91.                 padre = 0
  92.                 encontrado = FALSE
  93.  
  94.                 // Buscar el nodo a eliminar
  95.                 mientras (actual <> 0 and not encontrado) {
  96.                     si (valor == arbol[actual].valor) {
  97.                         encontrado = TRUE
  98.                     sino
  99.                         padre = actual
  100.                         si (valor < arbol[actual].valor) {
  101.                             actual = arbol[actual].izquierdo
  102.                         sino
  103.                             actual = arbol[actual].derecho
  104.                         }
  105.                     }
  106.                 }
  107.  
  108.                 si (not encontrado) {
  109.                     imprimir("\nEl número no se encuentra en el árbol.")
  110.                 sino
  111.                     // Nodo con un solo hijo o sin hijos
  112.                     si (arbol[actual].izquierdo == 0 or arbol[actual].derecho == 0) {
  113.                         si (arbol[actual].izquierdo == 0) {
  114.                             hijo = arbol[actual].derecho
  115.                         sino
  116.                             hijo = arbol[actual].izquierdo
  117.                         }
  118.  
  119.                         si (padre == 0) {
  120.                             raiz = hijo
  121.                         sino
  122.                             si (actual == arbol[padre].izquierdo) {
  123.                                 arbol[padre].izquierdo = hijo
  124.                             sino
  125.                                 arbol[padre].derecho = hijo
  126.                             }
  127.                         }
  128.                     sino
  129.                         // Nodo con dos hijos: buscar el sucesor
  130.                         reemplazo = arbol[actual].derecho
  131.                         padre_reemplazo = actual
  132.  
  133.                         mientras (arbol[reemplazo].izquierdo <> 0) {
  134.                             padre_reemplazo = reemplazo
  135.                             reemplazo = arbol[reemplazo].izquierdo
  136.                         }
  137.  
  138.                         arbol[actual].valor = arbol[reemplazo].valor
  139.  
  140.                         si (padre_reemplazo == actual) {
  141.                             arbol[padre_reemplazo].derecho = arbol[reemplazo].derecho
  142.                         sino
  143.                             arbol[padre_reemplazo].izquierdo = arbol[reemplazo].derecho
  144.                         }
  145.  
  146.                         actual = reemplazo
  147.                     }
  148.  
  149.                     // Liberar el nodo eliminado
  150.                     arbol[actual].izquierdo = libre
  151.                     libre = actual
  152.                 }
  153.                 //romper
  154.  
  155.             caso (opcion ==3)
  156.                 // Mostrar Raíz
  157.                 si (raiz == 0) {
  158.                     imprimir("\nEl árbol está vacío.")
  159.                 sino
  160.                     imprimir("\nLa raíz del árbol es: ", arbol[raiz].valor)
  161.                 }
  162.                 //romper
  163.  
  164.             caso (opcion ==4)
  165.                 imprimir("\nSaliendo del programa.")
  166.                 //romper
  167.  
  168.             sino
  169.                 imprimir("\nOpción no válida. Por favor, elija una opción válida.")
  170.                 //romper
  171.          }
  172.     hasta (opcion == 4)
  173. fin
  174.  
  175.  
Tags: Arboles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement