二叉树运用
#include<stdlib.h> #include<stdio.h> #include<string.h> #include<ctype.h> #define MAX_LEN 5 typedef struct node{ char optr; int data; struct node* lchild; struct node* rchild; }BTNode; BTNode * getNode(char *str,int &pos){ BTNode *createTree(char *str,int &pos); BTNode *p=new BTNode; char ch=str[0]; if(isdigit(ch)){ int i=0; char data[MAX_LEN]; while(isdigit(ch=str[i])) data[i++]=ch; p->data=atoi(data); pos+=i; } else if(ch=='+'||ch=='-'||ch=='*'||ch=='/'){ p->optr=ch; pos+=1; } else if(ch=')'){ pos+=1; return NULL; } else if(ch=='\0') return NULL; return p; } int getPriority(char optr){ switch(optr){ case'+': case'/': return 1; case'*': case'/': return 2; } return 0; } BTNode *createTree(char *str,int &pos){ int pos1=0; BTNode *lchild=getNode(str+pos1,pos1); BTNode *root=getNode(str+pos1,pos1); BTNode *rchild=getNode(str+pos1,pos1); root->lchild=lchild; root->rchild=rchild; BTNode *node; while((node=getNode(str+pos1,pos1))){ if(getPriority(root->optr)>getPriority(node->optr)){ node->lchild=root; node->rchild=getNode(str+pos1,pos1); root=node; } else{ node->lchild=root->rchild; root->rchild=node; node->rchild=getNode(str+pos1,pos1); } } pos+=pos1; return root; } int result(BTNode *b){ int n1,n2; switch(b->optr){ case'+': n1=result(b->lchild); n2=result(b->rchild); b->data=n1+n2; break; case'-': n1=result(b->lchild); n2=result(b->rchild); b->data=n1-n2; break; case'*': n1=result(b->lchild); n2=result(b->rchild); b->data=n1*n2; break; case'/': n1=result(b->lchild); n2=result(b->rchild); b->data=n1/n2; break; default: return b->data; } return b->data; } int main(){ BTNode*b=NULL,*q=NULL; char str[100]; printf("Please enter SQC£º"); scanf("%s",str); int n=0,i=0; while(str[i++]!='\0') n++; int pos=0; b=createTree(str,pos); printf("ASM:%d\n",result(b)); }