class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        // write code here
        vector<int> ret;
        if(!root) return ret;
        TreeNode* cur=root;
        stack<TreeNode*> s;
        s.push(root);
        while(!s.empty())
        {
            while(cur->left)
            {
                s.push(cur->left);
                cur=cur->left;
            }
            TreeNode* temp = s.top();
            s.pop();
            ret.push_back(temp->val);
            if(temp->right){
                cur=temp->right;
                s.push(cur);
            }
        }
        return ret;
    }
};