中国大学MOOC-数据结构基础习题集、03-3、Tree Traversals Again

题目链接:http://www.patest.cn/contests/mooc-ds/03-3

题目分析:借助“栈”进行树的后续遍历。栈工作记录中必须注明刚才是在左子树还是在右子树中。

  每次PUSH,times = 1;

  每次POP检查栈顶记录的times:如果是1,弹出来变成2压回栈;

                  如果是2,则弹出,放入存放结果的vector中,重复这一过程,直到栈顶times为1。

  所有PUSH与POP操作执行完毕时,输出vector内的数据和stack中的数据即可。注意要处理最后的空格。

代码分析:

  头文件声明:1~4  

  定义数据结构:5~14

  按照题目分析所说:15~57

  输出结果:58~70

 1 #include <iostream>
 2 #include <stack>
 3 #include <vector>
 4 using namespace std;
 5 typedef struct node
 6 {
 7     int data;
 8     int times;
 9     node(int d, int t)
10         :data(d), times(t)
11     {
12 
13     };
14 } Node;
15 int main()
16 {
17     int n;
18     cin >> n;
19     string cmd;
20     int x;
21     stack<Node> sta;
22     vector<int> vec;
23     for(int i=0; i<2*n; i++)
24     {
25         cin >> cmd;
26         if(cmd == "Push")
27         {
28             cin >> x;
29             sta.push(Node(x, 1));
30         }
31         if(cmd == "Pop")
32         {
33             Node node = sta.top();
34             sta.pop();
35             if(node.times == 1)
36             {
37                 node.times = 2;
38                 sta.push(node);
39             }
40             else if(node.times == 2)
41             {
42                 vec.push_back(node.data);
43                 while(sta.top().times == 2)
44                 {
45                     vec.push_back(sta.top().data);
46                     sta.pop();
47                 }
48                 if (sta.size() != 0)
49                 {
50                     node = sta.top();
51                     node.times = 2;
52                     sta.pop();
53                     sta.push(node);
54                 }
55             }
56         }
57     }
58     for(int i=0; i<vec.size(); i++)
59     {
60         cout << vec[i]<< " ";
61     }
62     while(sta.size() != 0)
63     {
64         cout << sta.top().data;
65         sta.pop();
66         if(sta.size() != 0)
67             cout << " ";
68     }
69     return 0;
70 }

AC成果:

posted @ 2014-12-22 11:24  聪明的聪聪  阅读(454)  评论(4编辑  收藏  举报