#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right)
: val(x), left(left), right(right) {}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
postOrder(root, result);
return result;
}
private:
void postOrder(TreeNode* node, vector<int>& result) {
if (node == nullptr) return;
postOrder(node->left, result);
postOrder(node->right, result);
result.push_back(node->val);
}
};
int main() {
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
Solution sol;
vector<int> result = sol.postorderTraversal(root);
cout << "Postorder traversal: ";
for (int val : result) {
cout << val << " ";
}
cout << endl;
return 0;
}
CgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBUcmVlTm9kZSB7CiAgICBpbnQgdmFsOwogICAgVHJlZU5vZGUgKmxlZnQ7CiAgICBUcmVlTm9kZSAqcmlnaHQ7CiAgICBUcmVlTm9kZSgpIDogdmFsKDApLCBsZWZ0KG51bGxwdHIpLCByaWdodChudWxscHRyKSB7fQogICAgVHJlZU5vZGUoaW50IHgpIDogdmFsKHgpLCBsZWZ0KG51bGxwdHIpLCByaWdodChudWxscHRyKSB7fQogICAgVHJlZU5vZGUoaW50IHgsIFRyZWVOb2RlICpsZWZ0LCBUcmVlTm9kZSAqcmlnaHQpCiAgICAgICAgOiB2YWwoeCksIGxlZnQobGVmdCksIHJpZ2h0KHJpZ2h0KSB7fQp9OwoKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICB2ZWN0b3I8aW50PiBwb3N0b3JkZXJUcmF2ZXJzYWwoVHJlZU5vZGUqIHJvb3QpIHsKICAgICAgICB2ZWN0b3I8aW50PiByZXN1bHQ7CiAgICAgICAgcG9zdE9yZGVyKHJvb3QsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCnByaXZhdGU6CiAgICB2b2lkIHBvc3RPcmRlcihUcmVlTm9kZSogbm9kZSwgdmVjdG9yPGludD4mIHJlc3VsdCkgewogICAgICAgIGlmIChub2RlID09IG51bGxwdHIpIHJldHVybjsKICAgICAgICBwb3N0T3JkZXIobm9kZS0+bGVmdCwgcmVzdWx0KTsKICAgICAgICBwb3N0T3JkZXIobm9kZS0+cmlnaHQsIHJlc3VsdCk7CiAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhub2RlLT52YWwpOwogICAgfQp9OwoKaW50IG1haW4oKSB7CgogICAgVHJlZU5vZGUqIHJvb3QgPSBuZXcgVHJlZU5vZGUoMSk7CiAgICByb290LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKDIpOwogICAgcm9vdC0+cmlnaHQgPSBuZXcgVHJlZU5vZGUoMyk7CiAgICByb290LT5sZWZ0LT5sZWZ0ID0gbmV3IFRyZWVOb2RlKDQpOwogICAgcm9vdC0+bGVmdC0+cmlnaHQgPSBuZXcgVHJlZU5vZGUoNSk7CgogICAgU29sdXRpb24gc29sOwogICAgdmVjdG9yPGludD4gcmVzdWx0ID0gc29sLnBvc3RvcmRlclRyYXZlcnNhbChyb290KTsKCiAgICBjb3V0IDw8ICJQb3N0b3JkZXIgdHJhdmVyc2FsOiAiOwogICAgZm9yIChpbnQgdmFsIDogcmVzdWx0KSB7CiAgICAgICAgY291dCA8PCB2YWwgPDwgIiAiOwogICAgfQogICAgY291dCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==