/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <iostream>
class Solution {
public:
    int KthNode(TreeNode* proot, int k) {
        if(proot == nullptr){
            return -1;
        }
        
        int count = 0;
        stack<TreeNode*> stk;
        TreeNode* root = proot;  //用root指针来跟踪当前的节点,如果直接跟踪栈的顶点,那么会重复进行左侧深入

        while(root || !stk.empty()){  //root可能没有没有右节点,直接上一层取stk;

            while(root){  //向左边深入
                stk.push(root);
                root = root->left;
            }

            root = stk.top();stk.pop();  //检测

            count++;
            if(count == k)return root->val;

            root = root->right;
        }
            
        return -1;
    }
};