ããæ è¯ç¬¦æ ä¸è¡¨è¾¾å¼æ±å¼ 设计 å®éªç±»å« ç å¦ å§ çº§ï¼ å·ï¼ åï¼ è¯è¯ï¼ å®éªæ度ï¼è®¤çï¼ ï¼ å®éªç»æï¼æ£ç¡®ï¼ ï¼ å®éªç论ï¼ææ¡ï¼ ï¼ æä½æè½ï¼å¼ºï¼ ï¼ å®éªæ¥åï¼å¥½ï¼ ï¼ ä¸è¬ï¼ ï¼ å·®ï¼ ï¼ é¨åæ£ç¡®ï¼ ï¼éï¼ ï¼ çæï¼ ï¼ äºè§£ï¼ ï¼ ä¸è¬ï¼ å·®ï¼ ï¼ ä¸è¬ï¼ ï¼ å·®ï¼ ï¼ ä¸æï¼ ï¼ æç»©ï¼ æ导æå¸ï¼ æ¹é
æ¶é´ï¼ å¹´ æ æ¥ ãç®æ³è®¾è®¡ä¸åæ ãå®éªæ¥å -1- 1ãå®éªå
容æé¢ç® ï¼1ï¼å®ä¹äºåæ çç»æå¦ä¸ï¼ struct tree { int data; struct tree *left; struct tree *right; }; typedef struct tree btnode; typedef btnode *bt; // å®ä¹ç»æä½ // å®ä¹ä¸ä¸ªæ´åæ°æ®å // å®ä¹å·¦åæ æé // å®ä¹å³åæ æé // æ çç»æç±»å // å®ä¹æ ç»ç¹çæéç±»å + * 2 3 6 / 3 ï¼2ï¼æç®æ¯è¡¨è¾¾å¼ 2*3+6/3 çæ è¯ç¬¦æ ï¼è§å¾ 7-35ï¼åå
¥ä¸ç»´æ°ç»ã ï¼3ï¼æ±æ è¯ç¬¦æ çååºéåãä¸åºéååååºéåçåºåã ï¼4ï¼ä»¥ååºè®¡ç®æ è¯ç¬¦æ çå¼ã 2ãå®éªç®çä¸è¦æ± ï¼1ï¼ææ¡äºåæ çæ°ç»åå¨æ¹æ³ã ï¼2ï¼ææ¡äºåæ çé线æ§ç¹ç¹ãéå½ç¹ç¹åå¨æç¹æ§ã ï¼3ï¼å¤ä¹ äºåæ éåç®æ³åæ è¯ç¬¦æ çæ¦å¿µã ï¼4ï¼å©ç¨æ è¯ç¬¦æ çååºè®¡ç®è¡¨è¾¾å¼çå¼ï¼è¿ç®åªæ¶å+ã-ã*ã/ï¼ ã æ è¯ç¬¦æ 3ãå®éªæ¥éª¤ä¸æºç¨åº â´ å®éªæ¥éª¤ 1ã å建æ åæåæé以å表达å¼äºåæ ï¼éå®ç»æ¢æ¡ä»¶ã 2ã å建æ°ç»ç¹å
ååå
容ï¼åºç¨ä½¿è¡¨è¾¾å¼äºåæ åå«è¿è¡ååºè¾åºãä¸åè¾åºãåç»è¾åºã表 è¾¾å¼äºåæ ååºè®°å¼ï¼å®ä¹ä¸¤ä¸ªæä½æ°åéï¼å¹¶å¯¹ getvalue å½æ°ä½å£°æï¼å»ºç«ç»æ¢æ¡ä»¶ã 3ã è¿è¡ä¸»ç¨åºï¼å建表达å¼äºåæ ï¼å®ä¹è¾åºç»æåéã âµ æºä»£ç #include<stdlib.h> #include<stdio.h> struct tree { char data; struct tree *left; struct tree *right; }; typedef struct tree treenode; typedef treenode *btree; // æ çç»ææ°ç±»å // 声ææ ç»ç¹æéç±»å // ç»ç¹æ°æ® // æåå·¦åæ çæé // æåå³åæ çæé // æ çç»æ声æ ãç®æ³è®¾è®¡ä¸åæ ãå®éªæ¥å -2- int n; btree createbtree(int *data,int pos) { btree newnode; if (data[pos]==0||pos>n) return NULL; else { newnode=new treenode; newnode->data=data[pos]; newnode->left=createbtree(data,2*pos); // n 计ç®å符串é¿åº¦ // å建表达å¼äºåæ // æ°ç»ç¹æé // ç»æ¢æ¡ä»¶ // å建æ°ç»ç¹å
å // å建ç»ç¹å
容 // å建左åæ éå½è°ç¨ newnode->right=createbtree(data,2*pos+1); // å建å³åæ éå½è°ç¨ return newnode; } } void preorder(btree ptr) { if(ptr!=NULL) { printf(" %c",ptr->data); preorder(ptr->left); preorder(ptr->right); } } // 表达å¼äºåæ ååºè¾åº // ç»æ¢æ¡ä»¶ // è¾åºç»ç¹å
容 // å·¦åæ // å³åæ void inorder(btree ptr) { if (ptr!=NULL) { inorder(ptr->left); // 表达å¼äºåæ ä¸åºè¾åº // ç»æ¢æ¡ä»¶ // å·¦åæ ãç®æ³è®¾è®¡ä¸åæ ãå®éªæ¥å -3- printf(" %c",ptr->data); inorder(ptr->right); } } // è¾åºç»ç¹å
容 // å³åæ void postorder(btree ptr) { if(ptr!=NULL) { postorder(ptr->left); postorder(ptr->right); printf(" %c",ptr->data); } } // 表达å¼äºåæ ååºè¾åº // å³åæ // å·¦åæ // å³åæ // è¾åºç»ç¹å
容 int cal(btree ptr) { int operand1=0; int operand2=0; int getvalue(int op,int operand1,int operand2); if (ptr->left==NULL && ptr->right==NULL) return ptr->data-48; { operand1=cal(ptr->left); operand2=cal(ptr->right); return getvalue(ptr->data,operand1,operand2); } } // 表达å¼äºåæ ååºè®¡å¼ // å®ä¹æä½æ°åé 1 // å®ä¹æä½æ°åé 2 // 对 getvalue å½æ°ä½å£°æ // ç»æ¢æ¡ä»¶ // å·¦åæ // å³åæ int getvalue(int op,int operand1,int operand2) { // 计ç®äºåæ 表达å¼å¼ ãç®æ³è®¾è®¡ä¸åæ ãå®éªæ¥å -4- switch((char)op) { case'*':return(operand1*operand2); case'/':return(operand1/operand2); case'+':return(operand1+operand2); case'-':return(operand1-operand2); } } void main() { btree root=NULL; int result,k=1; int data[100]={' '}; char ch; // 主ç¨åº // 表达å¼äºåæ æé // å®ä¹è¾åºç»æåé printf("æååºè¾å
¥æ è¯ç¬¦æ çç»ç¹æ°æ®ï¼ä»¥å车é®è¡¨ç¤ºç»æ\n"); while((ch=getchar())!='\n') data[k++]=ch; data[k]='\0'; n=k-1; root=createbtree(data,1); printf("\t\n ååºè¡¨è¾¾å¼ï¼"); preorder(root); printf("\t\n\n ä¸åºè¡¨è¾¾å¼ï¼"); inorder(root); printf("\t\n\n ååºè¡¨è¾¾å¼ï¼"); postorder(root); result=cal(root); printf("\t\n\n 表达å¼ç»ææ¯ï¼%d\n\n",result); } // ååºè¾åºäºåæ // è®¡ç® // è¾åºè®¡ç®ç»æ // ä¸åºè¾åºäºåæ // ååºè¾åºäºåæ // å建表达å¼äºåæ ãç®æ³è®¾è®¡ä¸åæ ãå®éªæ¥å -5- 4ãæµè¯æ°æ®ä¸å®éªç»æï¼å¯ä»¥æå¾ç²è´´ï¼
温馨提示:答案为网友推荐,仅供参考