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

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

说明:
你可以假设 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);
    }
}
发布了250 篇原创文章 · 获赞 269 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/kangbin825/article/details/105339261