145. Binary Tree Post Order Traversal
1
\
2
/
3/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int>answer;
if (root == 0)
return answer;
stack<TreeNode*> s;
s.push(root);
TreeNode* last_pop = root;
while (!s.empty())
{
TreeNode* top = s.top();
if (top->left && top->left != last_pop && top->right != last_pop) // push_left
{
s.push(top->left);
}
else if (top->right && top->right != last_pop && (!top->left || top->left == last_pop)) // push_right
{
s.push(top->right);
}
else // pop
{
s.pop();
last_pop = top;
// cout << top->val << ' '; // visit top
answer.push_back(top -> val);
}
}
return answer;
}
};Last updated
Was this helpful?