class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ret;
        if(!root) return ret;
        stack<TreeNode*> s;
        while(!s.empty() || root!=nullptr)
        {
            if(root){
                s.push(root);
                root = root->left;
            }else{
                
                ret.push_back(s.top()->val);
                root = s.top()->right;
                s.pop();
            }
        }
        return ret;
    }
};