uva 11234

来源:互联网 发布:网络交友的利的根据 编辑:程序博客网 时间:2024/06/12 20:03

题意 :实际上就是让我们建树,然后遍历树,逆序输出。。


#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <stack>using namespace std;class Node{public :char data;int left,right;}node[10005];char s[10005];stack<int >st;queue<int >qu;int result[10005],inpos;void bfs(int root)  //从根节点开始层次遍历,记录结果{while(!qu.empty())qu.pop();qu.push(root);result[inpos++] = node[root].data;  while(!qu.empty()){int t = qu.front();  //拿出一个节点开始遍历qu.pop();if(node[t].left != -1){result[inpos++] = node[node[t].left].data;qu.push(node[t].left);   // 队是先进先出的}if(node[t].right != -1){result[inpos++] = node[node[t].right].data;qu.push(node[t].right);}}}int main(){int t;scanf("%d",&t);getchar();while(t--){scanf("%s",s);while(!st.empty())st.pop();for(int i =0 ; i < strlen(s) ; i++ ){if(s[i]>='a' && s[i]<= 'z'){st.push(i);    // 我们每次入栈的是根节点node[i].data = s[i];node[i].left = -1;node[i].right = -1;}else{int r = st.top();st.pop();int l = st.top();st.pop();node[i].data = s[i];  // 构建一棵小树,然后还是根节点入栈node[i].left = l;node[i].right = r;st.push(i);}}inpos = 0;bfs(st.top());  for(int i = inpos-1 ; i >= 0 ; i--)   // 倒序输出printf("%c",result[i]);printf("\n");}return 0;}



原创粉丝点击