/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    int cnt = 0;
    TreeNode* res = nullptr;
    void mid_traverse(TreeNode* proot, int k) {
        if (proot == nullptr || cnt > k || k == 0) return;
        mid_traverse(proot->left, k);
        cnt++;
        if (cnt == k) res = proot;
        mid_traverse(proot->right, k);
    }
    int KthNode(TreeNode* proot, int k) {
        mid_traverse(proot, k);
        if (res) return res->val;
        return -1;
    }
};

class Solution {
public:
    vector<int> res;  // 借助数组下标
    int KthNode(TreeNode* pRoot, int k) {
        if (pRoot == nullptr || k == 0) return -1;
        KthNode(pRoot->left, k);
        res.push_back(pRoot->val);
        KthNode(pRoot->right, k);
        return k > res.size() ? -1 : res[k-1];
    }
};