如果是二叉搜索树的话可以利用其性质直接中序遍历即可
如果是任意二叉树的话,这让我联想到了求一个数组的第K小的数字
利用最大堆来实现:
Java提供的PriorityQueue默认是最小堆,因此需要传入一个比较器变为最大堆

import java.util.*;
public class Solution {
    PriorityQueue<TreeNode> maxHeap = new  PriorityQueue<>(new maxComparator());
    public TreeNode KthNode(TreeNode pRoot, int k)
    {
        if(pRoot==null) return null;
        if(k==0) return null;
        preFind(pRoot,k);
        if(maxHeap.size()<k) return null;
        return maxHeap.peek();

    }
    public void preFind(TreeNode head, int k){
        if(head==null) return ;
        if(maxHeap.size()<k){//始终保证最大堆中只有K个节点
            maxHeap.offer(head);
        }else{
            if(head.val<maxHeap.peek().val){
                maxHeap.poll();
                maxHeap.offer(head);
            }
        }
        preFind(head.left,k);
        preFind(head.right,k);
    }

}

class maxComparator implements Comparator<TreeNode>{
    @Override
    public int compare(TreeNode t1,TreeNode t2){
        return t1.val>=t2.val?-1:1;
    }
}