把字尾表示式轉換為表示式樹
阿新 • • 發佈:2019-01-25
//簡單起見,每個運算數節點儲存的為小寫英文字母 #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; }