思路:
方法1:使用二叉树的中序遍历非递归版,利用栈和一个计数变量得到第k小节点。

TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(k==0)return null;
        Stack<TreeNode> stack = new Stack<>();
        while(pRoot!=null||!stack.isEmpty()){
            if(pRoot!=null){
                stack.push(pRoot);
                pRoot=pRoot.left;
            }else{
                TreeNode node = stack.pop();
                if(--k==0) return node;
                pRoot = node.right;

            }
        }
        return null;

    }

方法2:使用dfs,中序遍历用全局变量记录递归过程的次数和节点引用。

    int time = 0;
    TreeNode node = null;
    TreeNode KthNode(TreeNode pRoot, int k)
    {

        dfs(pRoot,k);
        return node;
    }
    void dfs(TreeNode pRoot,int k){
        if(pRoot == null)return;
        KthNode(pRoot.left,k);
        if(++time==k){
            node = pRoot;
            return;
        }
        KthNode(pRoot.right,k);

    }