题目
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
思路
建立最小堆,遍历二叉树,将二叉树的节点都存入堆中,然后依据最小堆取元素的思路
代码
class Solution {
class Mycomparator implements Comparator<TreeNode>{
public int compare(TreeNode t1,TreeNode t2){
return t1.val-t2.val;
}
}
Queue<TreeNode>queue=new PriorityQueue<>(new Mycomparator());
public int kthSmallest(TreeNode root, int k) {
tranvesl(root);
while(k>0){
TreeNode t=queue.poll();
k--;
if(k==0){
return t.val;
}
}
return -1;
}
public void tranvesl(TreeNode root){
if(root==null){
return;
}
queue.add(root);
tranvesl(root.left);
tranvesl(root.right);
}
}