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

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

   1
    \
     2
    /
   3

 

return [1,3,2].

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

 

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<int> inorderTraversal(TreeNode* root) {
13         vector<int> res;
14         inorderhelp(root,res);
15         return res;
16         
17         
18     }
19     void inorderhelp(TreeNode* root,vector<int> &res)
20     {
21         if(root==NULL)
22         return;
23         inorderhelp(root->left,res);
24         res.push_back(root->val);
25         inorderhelp(root->right,res);
26         return;
27     }
28 };
29 class Solution {
30 public: 
31     vector<int> inorderTraversal(TreeNode *root)
32     {
33         vector<int> res;
34         stack<pair<TreeNode* ,int>> s;
35         s.push(make_pair(root,0));
36         while(!s.empty())
37         {
38             TreeNode *now=s.top().first;
39             if(now==NULL)
40             s.pop();
41             else{
42                 switch(s.top().second++)
43                 {
44                     case 0:
45                         s.push(make_pair(now->left,0));
46                         break;
47                     case 1:
48                         res.push_back(now->val);
49                         
50                         break;
51                     default:
52                         s.pop();
53                         s.push(make_pair(now->right,0));
54                         break;
55                 }
56               
57             }
58         }    
59         return res;
60     }
61     
62 };