#include <iostream>
#include <stack>
#include <vector>
using namespace std;

struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<int> inorderTraversal(TreeNode *root); 
int main()
{
 TreeNode *a = new TreeNode(1);
 TreeNode *b = new TreeNode(2); 
 TreeNode *c = new TreeNode(3);
 a->left= b;
 a->right = c;
 vector<int> vt = inorderTraversal(a);
 for (vector<int>::iterator i = vt.begin();i!=vt.end();i++) {
     cout<< *i <<endl;    
 }
 return 1;
}
//code simple but not effcient 
vector<int> inorderTraversal(TreeNode *root) { //BFS
        vector<int> inorderlist;
        TreeNode *current=root;
        stack<TreeNode*> s;
        while (!s.empty() || current) {
          if (current) {
             s.push(current);
             current = current->left;
           } else {
              current = s.top();
              s.pop();
              inorderlist.push_back(current->val);
              current = current->right;
           }
     }
      return inorderlist;
 }