题目描述
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
输入:
{5,3,7,2,4,6,8},3
输出:
{4}
解法1:
(先说通用方法:这种求第k小的元素用大根堆,同理第k大的元素用小根堆)
利用大根堆(最大的元素在堆顶),遍历每个节点,每次都将元素加入大根堆,当堆中元素的个数大于K个时,就弹出堆顶元素
即让堆中最多保留K个元素,那么遍历结束后,堆中就剩K个元素,则堆顶就是我们要找的第K大元素。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k) {
if (k == 0) return null;
if (pRoot == null) return null;
if (numberOfTree(pRoot) < k) return null;
//PriorityQueue优先队列 默认小根堆,需要重写比较器
Queue<TreeNode<