Advertisement
idsystems

SLE_Practica65_OrdenPreorden

Jun 24th, 2024
617
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1.  
  2. /* Practica 65
  3.    Leer una expresión aritmética y mostrar los recorridos de orden,
  4.    preorden y suborden utilizando un árbol binario
  5. */
  6.  
  7. tipos
  8.    Nodo: registro {
  9.     valor: cadena
  10.     izquierdo: numerico
  11.     derecho: numerico
  12.    }
  13.  
  14. var
  15.     arbol: vector [100] Nodo
  16.     libre, temp, raiz, i: numerico
  17.     expresion: cadena
  18.  
  19. inicio
  20.    cls()
  21.     libre = 1
  22.     raiz = 0
  23.  
  24.     // Inicializar la lista para el manejo de nodos libres
  25.     desde i=1 hasta 99 {
  26.         arbol[i].izquierdo = i + 1
  27.     }
  28.     arbol[100].izquierdo = 0
  29.  
  30.     // Leer la expresión aritmética
  31.     imprimir("\nIntroduce una expresión aritmética: ")
  32.     leer(expresion)
  33.  
  34.     // Construir el árbol de expresión
  35.     raiz = construir_arbol(expresion)
  36.  
  37.     // Mostrar los recorridos del árbol
  38.     imprimir("\nRecorrido en Preorden:")
  39.     recorrido_preorden(raiz)
  40.     imprimir("\nRecorrido en Inorden:")
  41.     recorrido_inorden(raiz)
  42.     imprimir("\nRecorrido en Postorden:")
  43.     recorrido_postorden(raiz)
  44.  
  45. fin
  46.  
  47.  
  48.     // Procedimiento para construir el árbol de expresión
  49. subrutina construir_arbol(exp: cadena) retorna numerico
  50.     var
  51.       pila: vector [100] numerico
  52.       topo, temp, actual, izq, der: numerico
  53.       i: numerico
  54.       simbolo: cadena
  55.    inicio
  56.       topo = 1
  57.         i = 1
  58.       mientras (i <= strlen(exp)) {
  59.          simbolo = substr(exp, i, 1)
  60.             si (simbolo >= "0" and simbolo <= "9" or simbolo >= "a" and simbolo <= "z") {
  61.             temp = libre
  62.             libre = arbol[libre].izquierdo
  63.             arbol[temp].valor = simbolo
  64.             arbol[temp].izquierdo = 0
  65.             arbol[temp].derecho = 0
  66.             topo = topo + 1
  67.             pila[topo] = temp
  68.          sino
  69.             der = pila[topo]
  70.             topo = topo - 1
  71.             izq = pila[topo]
  72.             temp = libre
  73.             libre = arbol[libre].izquierdo
  74.             arbol[temp].valor = simbolo
  75.             arbol[temp].izquierdo = izq
  76.             arbol[temp].derecho = der
  77.             pila[topo] = temp
  78.          }
  79.          i = i + 1
  80.         }
  81.       retorna pila[1]
  82.     fin
  83.  
  84.  
  85.     // Procedimientos para los recorridos del árbol
  86. subrutina recorrido_preorden(nodo: numerico)
  87. inicio
  88.       si (nodo <> 0) {
  89.          imprimir(arbol[nodo].valor)
  90.          recorrido_preorden(arbol[nodo].izquierdo)
  91.          recorrido_preorden(arbol[nodo].derecho)
  92.       }
  93. fin
  94.  
  95. subrutina recorrido_inorden(nodo: numerico)
  96. inicio
  97.       si (nodo <> 0) {
  98.          recorrido_inorden(arbol[nodo].izquierdo)
  99.          imprimir(arbol[nodo].valor)
  100.          recorrido_inorden(arbol[nodo].derecho)
  101.       }
  102. fin
  103.  
  104. subrutina recorrido_postorden(nodo: numerico)
  105. inicio
  106.       si (nodo <> 0) {
  107.          recorrido_postorden(arbol[nodo].izquierdo)
  108.          recorrido_postorden(arbol[nodo].derecho)
  109.          imprimir(arbol[nodo].valor)
  110.       }
  111. fin
  112.  
  113.  
Tags: Arboles
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement