设置了两个递归方法外的全局变量,分别来储存当前离目标结点还差几个节点了,一个用来储存最终寻找到的目标节点。递归就是很普通的中序遍历,只不过要注意的优化点是:第一,当成功找到第k个点时,后续的节点无须继续遍历;第二,当整棵树都遍历完成却依然没达到k这个大小,那就要返回null(没找到)

TreeNode KthNode(TreeNode pRoot, int k){
    if(pRoot==null) return null;
    int[] kk =new int[1];
    kk[0]=k;
    TreeNode[] res = new TreeNode[1];
    search(pRoot,kk,res);    
    return kk[0]==0?res[0]:null;        
}

void search(TreeNode head, int[] kk,TreeNode[] res) {
    if(kk[0]==0)return;
    if(head.left!=null) search(head.left, kk,res);
    if(kk[0]==0)return;
    if(kk[0]--==1) {
        res[0]=new TreeNode(head.val);
        return;
    }
    if(head.right!=null) search(head.right, kk,res);        
}