Skip to content

Latest commit

 

History

History
74 lines (46 loc) · 1.3 KB

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

File metadata and controls

74 lines (46 loc) · 1.3 KB

题目

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

给定一个二叉搜索树的根节点 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 小的值,你将如何优化算法?

代码

class Solution {
    // 1 : 遍历存储序列, 返回get(n-k)
    // 2 : 正序遍历k--
    int th = -1;
    int res= -1;
    public int kthSmallest(TreeNode root, int k) {
        this.th=k;
        dfs(root);
        return res;
    }

    private void dfs(TreeNode root){
        if(root==null) return ;
        if(th<=0) return;
        dfs(root.left);
        if(--th==0){
            res=root.val;
            return;
        }
        dfs(root.right);
    }
}

思路

仍然是利用二叉搜索树 中序遍历为有序序列的特性。