美文网首页
【leetcode-树】二叉搜索树中第K小的元素

【leetcode-树】二叉搜索树中第K小的元素

作者: 程序员小2 | 来源:发表于2020-07-12 23:07 被阅读0次

【leetcode-树】二叉搜索树中第K小的元素


给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

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

2
输出: 1
示例 2:

输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
输出: 3
进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?

思路:

二叉搜索树特点:二叉搜索树相信大家都知道它的特征是,左子树的任意结点值<根结点值<右子树结点值, 因此采用中序遍历可以得到一个有序列表; 题目只需要求第k小的只,那么直接遍历到第k个就可以停止遍历了。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthSmallest(TreeNode root, int k) {
        List<Integer> res = new ArrayList<>();
        centerSearch(res, root, k);
 
        return  res.get(k-1);
 
    }
 
    private void centerSearch(List<Integer> res, TreeNode root, int k) {
        if(root==null || res.size()>=k) {
            return;
        }
 
        centerSearch(res, root.left, k);
        res.add(root.val);
        centerSearch(res, root.right, k);
    }
}
 

相关文章

网友评论

      本文标题:【leetcode-树】二叉搜索树中第K小的元素

      本文链接:https://www.haomeiwen.com/subject/fecocktx.html