//简单起见,每个运算数节点存储的为小写英文字母
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
struct BinTreeNode{
char Element;
struct BinTreeNode* Left;
struct BinTreeNode* Right;
};
struct BinTreeNode* CreateNode(char ch)
{
struct BinTreeNode* temp;
temp=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode));
temp->Left=NULL;
temp->Right=NULL;
temp->Element=ch;
return temp;
}
void PreTrversal(struct BinTreeNode* ExpTree)
{
if(ExpTree==NULL)
return;
printf("%c ",ExpTree->Element);
if(ExpTree->Left!=NULL)
PreTrversal(ExpTree->Left);
if(ExpTree->Right!=NULL)
PreTrversal(ExpTree->Right);
return;
}
int main()
{
char data[100];
struct BinTreeNode* stack[100];
int top=-1;
gets(data);
for(int i=0;data[i]!='\0';i++){
if(strchr("+-*/",data[i])!=NULL){
struct BinTreeNode* temp=CreateNode(data[i]);
struct BinTreeNode* t1=stack[top--];
struct BinTreeNode* t2=stack[top--];
temp->Left=t2;
temp->Right=t1;
stack[++top]=temp;
}
else{
struct BinTreeNode* temp=CreateNode(data[i]);
stack[++top]=temp;
}
}
struct BinTreeNode* ExpTree=stack[top];
//为了验证,先序遍历一遍
PreTrversal(ExpTree);
return 0;
}
把后缀表达式转换为表达式树
最新推荐文章于 2021-12-03 15:26:48 发布