Creación de un árbol de expresión a partir de una expresión de prefijo

Dada una array de caracteres a[] que representa una expresión de prefijo. La tarea es construir un árbol de expresión para la expresión y luego imprimir la expresión de infijo y posfijo del árbol construido.
Ejemplos: 
 

Entrada: a[] = “*+ab-cd” 
Salida: La expresión Infijo es: 
a + b * c – d 
La expresión Postfijo es: 
ab + cd – *
Entrada: a[] = “+ab” 
Salida: El La expresión infijo es: 
a + b 
La expresión sufijo es: 
ab + 
 

Enfoque: si el carácter es un operando, es decir , X , entonces será el Node de hoja del árbol requerido, ya que todos los operandos están en la hoja de un árbol de expresión. De lo contrario, si el carácter es un operador y tiene la forma OP XY , será un Node interno con el elemento secundario izquierdo como expressionTree (X) y el elemento secundario derecho como expressionTree (Y) , que se puede resolver mediante una función recursiva.
A continuación se muestra la implementación del enfoque anterior:
 

C

// C program to construct an expression tree
// from prefix expression
#include <stdio.h>
#include <stdlib.h>
 
// Represents a node of the required tree
typedef struct node {
    char data;
    struct node *left, *right;
} node;
 
// Function to recursively build the expression tree
char* add(node** p, char* a)
{
 
    // If its the end of the expression
    if (*a == '\0')
        return '\0';
 
    while (1) {
        char* q = "null";
        if (*p == NULL) {
 
            // Create a node with *a as the data and
            // both the children set to null
            node* nn = (node*)malloc(sizeof(node));
            nn->data = *a;
            nn->left = NULL;
            nn->right = NULL;
            *p = nn;
        }
        else {
 
            // If the character is an operand
            if (*a >= 'a' && *a <= 'z') {
                return a;
            }
 
            // Build the left sub-tree
            q = add(&(*p)->left, a + 1);
 
            // Build the right sub-tree
            q = add(&(*p)->right, q + 1);
 
            return q;
        }
    }
}
 
// Function to print the infix expression for the tree
void inr(node* p) // recursion
{
    if (p == NULL) {
        return;
    }
    else {
        inr(p->left);
        printf("%c ", p->data);
        inr(p->right);
    }
}
 
// Function to print the postfix expression for the tree
void postr(node* p)
{
    if (p == NULL) {
        return;
    }
    else {
        postr(p->left);
        postr(p->right);
        printf("%c ", p->data);
    }
}
 
// Driver code
int main()
{
    node* s = NULL;
    char a[] = "*+ab-cd";
    add(&s, a);
    printf("The Infix expression is:\n ");
    inr(s);
    printf("\n");
    printf("The Postfix expression is:\n ");
    postr(s);
    return 0;
}

Python3

# Python3 program to construct an expression tree
# from prefix expression
 
# Represents a node of the required tree
class node:
    def __init__(self,c):
        self.data=c
        self.left=self.right=None
 
# Function to recursively build the expression tree
def add(a):
 
    # If its the end of the expression
    if (a == ''):
        return ''
 
    # If the character is an operand
    if a[0]>='a' and a[0]<='z':
        return node(a[0]),a[1:]
    else:
        # Create a node with a[0] as the data and
        # both the children set to null
        p=node(a[0])
        # Build the left sub-tree
        p.left,q=add(a[1:])
        # Build the right sub-tree
        p.right,q=add(q)
        return p,q
         
 
# Function to print the infix expression for the tree
def inr(p): #recursion
 
    if (p == None):
        return
    else:
        inr(p.left)
        print(p.data,end=' ')
        inr(p.right)
 
# Function to print the postfix expression for the tree
def postr(p):
 
    if (p == None):
        return
    else:
        postr(p.left)
        postr(p.right)
        print(p.data,end=' ')
 
# Driver code
if __name__ == '__main__':
     
    a = "*+ab-cd"
    s,a=add(a)
    print("The Infix expression is:")
    inr(s)
    print()
    print("The Postfix expression is:")
    postr(s)
 
# This code is contributed by Amartya Ghosh
Producción: 

The Infix expression is:
 a + b * c - d 
The Postfix expression is:
 a b + c d - *

 

Publicación traducida automáticamente

Artículo escrito por janice_shah y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *