1

                Never    
C
       
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

typedef struct Node{
    struct Node *left;
    struct Node *right;
    char data;
}Node;

Node *a;

void constructTree(Node **head);
void printInfix(Node *root);

int main()
{
    constructTree(&a);
    printInfix(a);
    printf("\n");
}

void constructTree(Node **head)
{

    (*head)=(Node*)malloc(sizeof(Node));

    char c;
    c=getchar();
    (*head)->data=c;
    (*head)->right=(*head)->left=NULL;

    if((*head)->data=='*' ||(*head)->data=='/' || (*head)->data=='+' || (*head)->data=='-' )
    {
        constructTree(&(*head)->left);
        constructTree(&(*head)->right);
    }
    return;
}

void printInfix(Node *root)
{
    if(root->left!=NULL)
    {
        if((root->data=='*'||root->data=='/') && (root->left->data=='+'|| root->left->data=='-'))printf("(");
        printInfix(root->left);
        if((root->data=='*'||root->data=='/') && (root->left->data=='+'|| root->left->data=='-'))printf(")");
    }
    printf("%c",root->data);
    if(root->right!=NULL)
    {
        if(((root->data=='*') && (root->right->data=='+'|| root->right->data=='-'))||((root->data=='-')&&((root->right->data=='+')||(root->right->data=='-')))||((root->data=='/') && !isalpha(root->right->data)))printf("(");
        printInfix(root->right);
        if(((root->data=='*') && (root->right->data=='+'|| root->right->data=='-'))||((root->data=='-')&&((root->right->data=='+')||(root->right->data=='-')))||((root->data=='/') && !isalpha(root->right->data)))printf(")");
    }
    return;

}

Raw Text