1 class Solution{
2 public:
3 vector<int>postorderTraversal(TreeNode *root)
4 {
5 vector<int>postOrder;
6 Traversal(root,postOrder);
7 return postOrder;
8 }
9 stack<TreeNode*> st;
10 private:
11 void Traversal(TreeNode *root,vector<int>&postOrder)
12 {
13 if(root==NULL)
14 return;
15 TreeNode *p;
16 TreeNode *pre=NULL;
17 bool flag=true;
18 p=root;
19 while(p||!st.empty())
20 {
21 if(p)
22 {
23 st.push(p);
24 p=p->left;
25 }
26 else
27 {
28 p=st.top();
29 if(p->right==NULL||p->right==pre)
30 {
31 st.pop();
32 postOrder.push_back(p->val);
33 pre=p;
34 p=NULL;
35 }
36 else
37 {
38 p=p->right;
39 }
40 }
41 }
42
43 }
44 };