#include<bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
TreeNode * left, * right;
TreeNode(){};
TreeNode(int v) : val(v), left(nullptr), right(nullptr){};
};
bool isPush(const string & s) {
return s != "Pop";
}
TreeNode * build_tree(vector<string> & cmds, int l, int r) {
if(l > r || ! isPush(cmds[l]))
return nullptr;
int val;
int i = l, balance = 0;
sscanf(cmds[l].c_str(), "Push %d", &val);
while(i == l || (i <= r && balance != 0)) {
if(isPush(cmds[i]))
++balance;
else
--balance;
++i;
}
auto root = new TreeNode(val);
root->left = build_tree(cmds, l + 1, i - 1);
root->right = build_tree(cmds, i, r);
return root;
}
TreeNode * pre = nullptr;
void postOrder(TreeNode * root) {
if(! root)
return;
postOrder(root->left);
postOrder(root->right);
if(pre)
cout << " ";
cout << root->val;
pre = root;
}
int main() {
int n;
cin >> n;
getchar();
vector<string> cmds;
string tmp;
while(getline(cin, tmp))
cmds.push_back(tmp);
auto root = build_tree(cmds, 0, cmds.size() - 1);
postOrder(root);
cout << endl;
}
PAT甲级 1086 Tree Traversals Again
最新推荐文章于 2024-06-05 15:16:22 发布