My simple 20 ms iterative C++ code
/**\n     * Definition for a binary tree node.\n     * struct TreeNode {\n     *     int val;\n     *     TreeNode *left;\n     *     TreeNode *right;\n     *  
    /**\n     * Definition for a binary tree node.\n     * struct TreeNode {\n     *     int val;\n     *     TreeNode *left;\n     *     TreeNode *right;\n     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}\n     * };\n     */\n    class Solution {\n    public:\n        int kthSmallest(TreeNode* root, int k) {\n            \n            TreeNode * current = root;\n            stack<TreeNode*> s;\n            while(!s.empty() || current != NULL)\n            {\n                if(current)\n                {\n                    s.push(current);\n                    current = current->left;\n                }\n                else\n                {\n                    current = s.top();\n                    s.pop();\n                    k--;\n                    if(k == 0)\n                        return current->val;\n                    current = current->right;    \n                }\n                \n            }\n        }\n    };
[]