首页 > 代码库 > uva-11234-表达式

uva-11234-表达式

后缀表达式,使用队列计算,要求计算的结果一样,输出队列的输入串

表达式转二叉树,层次序遍历,先右孩子,然后字符串反转输出

 

#include <iostream>#include <sstream>#include<algorithm>#include<memory.h>#include<stdio.h>#include<queue>#include<stack>using namespace std;#define null NULLconst int N = 10000;struct Node{    Node* p;    Node* r;    Node* l;    char key;    Node()    {        p = null;        r = null;        l = null;        key = 0;    }};void print(queue<Node*> q, string& str){    Node* node = null;    while (!q.empty())    {        node = q.front();        q.pop();        str += node->key;        if (node->r != null)            q.push(node->r);        if (node->l != null)            q.push(node->l);    }}int main(){    freopen("d:\\1.txt", "r", stdin);    int t;    cin >> t;    while (t--)    {        Node* root;        string str;        cin >> str;        stack<Node*> s;        int l = str.length();        for (int i = 0; i < l; i++)        {            char c = str.at(i);            Node* node = new Node();            node->key = c;            if (A <= c && c <= Z)            {                Node* l = s.top();                s.pop();                Node* r = s.top();                s.pop();                node->l = l;                node->r = r;            }            s.push(node);        }        root = s.top();        s.pop();        queue<Node*> q;        q.push(root);        string& str1 = str;        str="";        print(q, str1);        reverse(str.begin(), str.end());        cout << str << endl;    }    return 0;}

 

uva-11234-表达式