125 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include<stdbool.h>
 | |
| #include<ctype.h>
 | |
| #include<string.h>
 | |
| #define MAX 100
 | |
| 
 | |
| typedef struct TNode *Tptr;
 | |
| typedef struct TNode
 | |
| {
 | |
|     char data;
 | |
|     Tptr leftchild;
 | |
|     Tptr rightchild;
 | |
| }TNode;
 | |
| ///*
 | |
| //Create nodes in the tree
 | |
| Tptr createNode(char val)
 | |
| {
 | |
|     Tptr temp =(Tptr)malloc(sizeof(TNode));
 | |
|     temp->data = val;
 | |
|     temp->leftchild = temp->rightchild = NULL;
 | |
|     return temp;
 | |
| }
 | |
| //*/
 | |
| 
 | |
| Tptr stack[MAX];
 | |
| int top=-1;
 | |
| int i;
 | |
| 
 | |
| //check if stack is empty
 | |
| bool isEmpty()
 | |
| {
 | |
|     return top==-1;
 | |
| }
 | |
| 
 | |
| //check if stack is full
 | |
| bool isFull()
 | |
| {
 | |
|     return top==MAX -1;
 | |
| }
 | |
| 
 | |
| //push element onto stack
 | |
| void Push(Tptr e)
 | |
| {
 | |
|     if(isFull())
 | |
|     {
 | |
|         return;
 | |
|     }
 | |
|     stack[++top]=e;
 | |
| }
 | |
| 
 | |
| //pop element from stack
 | |
| Tptr Pop()
 | |
| {
 | |
|     Tptr popped=createNode('\0');
 | |
|     if(isEmpty())
 | |
|     {
 | |
|         free(popped);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         popped=stack[top--];
 | |
|     }
 | |
|     return popped;
 | |
| }
 | |
| 
 | |
| //check if character is operator
 | |
| bool isOperator(char ch)
 | |
| {
 | |
|     bool ret=false;
 | |
|     if(ch=='*' || ch=='/' || ch=='+' || ch=='-' || ch=='^' )
 | |
|     {
 | |
|         ret = true;
 | |
|     }
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| Tptr createExpression(char* postfix)
 | |
| {
 | |
|     int i;
 | |
|     int plen =strlen(postfix);
 | |
|     char cc;
 | |
|     for(i=0;i<plen;i++)
 | |
|     {
 | |
|         cc = postfix[i];
 | |
|         if(isalnum(cc))
 | |
|         {
 | |
|             Tptr node = createNode(cc);
 | |
|             Push(node);
 | |
|         }
 | |
|         else if(isOperator(cc))
 | |
|         {
 | |
|             Tptr node = createNode(cc);
 | |
|             node->rightchild = Pop();
 | |
|             node->leftchild = Pop();
 | |
|             Push(node);
 | |
|         }
 | |
|     }
 | |
|     return stack[top];
 | |
| }
 | |
| 
 | |
| void inOrderTraversal(Tptr root)
 | |
| {
 | |
|     if (root != NULL)
 | |
|     {
 | |
|         inOrderTraversal(root->leftchild);
 | |
|         printf("%c ", root->data);
 | |
|         inOrderTraversal(root->rightchild);
 | |
|     }
 | |
| }
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     char postfix[] = "ab*cd/-";
 | |
|     Tptr expressionTree = createExpression(postfix);
 | |
| 
 | |
|     if (expressionTree != NULL)
 | |
|     {
 | |
|         printf("In-Order Traversal of the Expression Tree: ");
 | |
|         inOrderTraversal(expressionTree);
 | |
|         printf("\n");
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | 
