Leetcode刷题100天—230. 二叉搜索树中第K小的元素—day69

举报
神的孩子在歌唱 发表于 2021/12/15 16:51:19 2021/12/15
【摘要】 前言:这解法有点拉胯仅供参考作者:神的孩子在歌唱一个努力学算法的小菜鸡大家好,我叫智 230. 二叉搜索树中第K小的元素难度中等541给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1示例 2:输入:root = [5,3,6,2,4,nul...

前言:这解法有点拉胯仅供参考

作者:神的孩子在歌唱
一个努力学算法的小菜鸡
大家好,我叫智

230. 二叉搜索树中第K小的元素

难度中等541

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例 1:

img

输入:root = [3,1,4,null,2], k = 1
输出:1

示例 2:

img

输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3

提示:

  • 树中的节点数为 n
  • 1 <= k <= n <= 104
  • 0 <= Node.val <= 104

**进阶:**如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?

package 二叉树;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

/*
 * https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/
 * 求第k个最小元素用优先队列
*/
public class _230_二叉搜索树中第K小的元素 {
    public int kthSmallest(TreeNode root, int k) {
//    	创建优先队列
    	PriorityQueue<Integer> queue= new PriorityQueue<>();
//    	定义队列
    	Queue<TreeNode> queue2= new LinkedList<TreeNode>();
    	
//    	定义指针
//    	TreeNode node=root;
    	queue2.add(root);
    	while(!queue2.isEmpty()) {
    		TreeNode node=queue2.poll();
            
    		
    		queue.add(node.val);

    		if (node.left!=null) {
    			queue2.add(node.left);
			}
    		if (node.right!=null) {
    			queue2.add(node.right);
			}
    		
    	}
    	while(k--!=1) {
    		queue.poll();
    	}
    	return queue.peek();
    }
}

转载说明:跟我说明,务必注明来源,附带本人博客连接。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。