逆序表达式转换为中序表达式
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXLENGTH 100
struct ExpTree;
typedef struct ExpTree *BRANCH;
struct ExpTree {
int element;
BRANCH left;
BRANCH right;
};
struct ExpTree *stack[MAXLENGTH];
int top = -1;
void push(struct ExpTree *tree)
{
if(top < MAXLENGTH - 1)
stack[++top] = tree;
}
struct ExpTree *pop(void)
{
if(top >= 0)
return stack[top--];
}
void Print_Tree(struct ExpTree *tree)
{
if(tree != NULL) {
if(tree->element == '+' || tree->element == '-')
printf("(");
Print_Tree(tree->left);
printf("%c", tree->element);
Print_Tree(tree->right);
if(tree->element == '+' || tree->element == '-')
printf(")");
}
}
int main()
{
int c;
struct ExpTree *tree;
while((c = getchar()) != EOF && c != '\n') {
if(isalnum(c)) {
tree = (struct ExpTree *)malloc(sizeof(struct ExpTree));
tree->element = c;
tree->left = NULL;
tree->right = NULL;
push(tree);
}
else if(c != ' ') {
tree = (struct ExpTree *)malloc(sizeof(struct ExpTree));
tree->element = c;
tree->right = pop();
tree->left = pop();
push(tree);
}
}
Print_Tree(pop());
printf("\n");
return 0;
}