因为知道小写字母代表叶子,大写字母代表非叶子,如后序为bcA,那么中序久违bAc,这样就可以用逆波兰表示法的二叉树做,把小写字母当成操作数,大写字母当成操作符,每有一个操作符就做一个操作。
/****************************************************************************************************** ** Copyright (C) 2011.07.01-2013.07.01 ** Author: famousDT <[email protected]> ** Edit date: 2011-12-07 ******************************************************************************************************/ #include <stdio.h> #include <stdlib.h>//abs,atof(string to float),atoi,atol,atoll #include <math.h>//atan,acos,asin,atan2(a,b)(a/b atan),ceil,floor,cos,exp(x)(e^x),fabs,log(for E),log10 #include <vector> #include <queue> #include <map> #include <time.h> #include <set> #include <list> #include <stack> #include <string> #include <iostream> #include <fstream> #include <assert.h> #include <bitset> #include <iterator>//C++Primer #include <string.h>//memcpy(to,from,count #include <ctype.h>//character process:isalpha,isdigit,islower,tolower,isblank,iscntrl,isprll #include <algorithm> using namespace std; //typedef long long int ll; #define MY_PI acos(-1) #define MY_MAX(a, b) ((a) > (b) ? (a) : (b)) #define MY_MIN(a, b) ((a) < (b) ? (a) : (b)) #define MY_MALLOC(n, type) ((type *)malloc((n) * sizeof(type))) #define MY_ABS(a) (((a) >= 0) ? (a) : (-(a))) #define MY_INT_MAX 0x7fffffff /*==========================================================*\ | \*==========================================================*/ struct node { char data; struct node *left; struct node *right; } wo[1000]; void inorder(struct node *x) { if (x != NULL) { inorder(x->left); printf("%c", x->data); inorder(x->right); } } int main() { int cases; char s[1000]; scanf("%d", &cases); getchar(); while (cases--) { stack<struct node *> st; gets(s); int i, len = strlen(s); for (i = 0; i < len; ++i) { wo[i].data = s[i]; wo[i].left = NULL; wo[i].right = NULL; } for (i = 0; i < len; ++i) { if (islower(wo[i].data)) { st.push(&wo[i]); } else { struct node *a, *b; a = st.top(); st.pop(); b = st.top(); st.pop(); wo[i].left = b; wo[i].right = a; st.push(&wo[i]); } } struct node *x = st.top(); inorder(x); printf("\n"); } return 0; }