11234 - Expressions

来源:互联网 发布:化妆品真伪查询软件 编辑:程序博客网 时间:2024/05/16 18:44

题目:11234 - Expressions


题目大意:就是将后缀表达式转换成层次遍历的逆向输出。


解题思路:

1,将后缀表达式利用栈建树,当遇到是小写字母时,建立叶子节点,遇到大写字母时,从栈中在弹出两个数,建立以大写字母为根的树。再将这个根节点放到栈中。

2,树建完后,就利用队列,进行层次遍历,最后在逆序输出。

#include<stdio.h>#include<string.h>#include<stack>#include<queue>using namespace std;int n;const int N = 10005;char s[N];struct treeNode {char name;treeNode * left;treeNode * right;treeNode(char ch):name(ch), left(NULL), right(NULL){}} * first = NULL;stack<treeNode *> st;queue<treeNode *> q;void buildtree (treeNode * t, treeNode * t1, treeNode *t2) {t->left = t1;t->right = t2;}void levelsearch() {treeNode * p = first;memset(s, 0, sizeof(s));int k = 0;q.push(p);while(!q.empty()) {s[k++] = q.front() ->name;p = q.front();q.pop();if(p->left != NULL)q.push(p->left);if(p ->right != NULL)q.push(p ->right);}s[k] = '\0';}int main() {scanf("%d", &n);while(n--) {scanf("%s", &s);int len = strlen(s), i;for(i = 0; i < len; i++) {treeNode *p = new treeNode(s[i]);if(i == len - 1)first = p;if(s[i] >= 'a' && s[i] <= 'z')st.push(p);else  {treeNode  *p1, *p2;p1 = st.top ();st.pop();p2 = st.top();st.pop();buildtree(p, p2, p1);st.push(p);}}while(!st.empty())st.pop();levelsearch();len  = strlen(s);for(i = len - 1; i >= 0 ; i--)printf("%c",s[i]);printf("\n");}return 0;}


0 0
原创粉丝点击