# 145. Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
\
2
/
3


return [3,2,1].

Note: Recursive solution is trivial, could you do it iteratively?

/**
* 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) {
struct TreeNodeFlag{
TreeNode* node;
bool flag;
TreeNodeFlag(TreeNode* x) :node(x), flag(false){}
};
vector<int> res;
stack<TreeNodeFlag *> mystack;
TreeNodeFlag* p = new TreeNodeFlag(root);
if (p->node){
mystack.push(p);
while (p->node->left){
p = new TreeNodeFlag(p->node->left);
mystack.push(p);
}
while (p->node->right){
p->flag = true;
p = new TreeNodeFlag(p->node->right);
mystack.push(p);
while (p->node->left){
p = new TreeNodeFlag(p->node->left);
mystack.push(p);
}
}
}

while (!mystack.empty()){
TreeNodeFlag* t = mystack.top();
if (t->flag == true || t->node->right == NULL){
res.push_back(t->node->val);
mystack.pop();
}
else{
while (t->node->right){
t->flag = true;
t = new TreeNodeFlag(t->node->right);
mystack.push(t);
while (t->node->left){
t = new TreeNodeFlag(t->node->left);
mystack.push(t);
}
}
}
}
return res;
}
};

01-16 3872

05-25 5734

07-09 1022

05-23 1096

06-02 752

04-24 1.2万

08-09 2495

12-09 1043

04-28 820

12-04 673