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
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