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


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

题目

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

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

在这里插入图片描述

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

解题思路

、这题可以考虑到用中序遍历,把中序遍历的结果依次存放在 list中,这样第1小的就是存放在list中的下标为0的位置,所以求第k小的,只要去list中拿到k-1位置的值。

总结一下:
1、树的题先写出左右递归的模板
2、根据题目要求看是前序、中序还是后序遍历,在对应位置填代码
3、本题利用BST中序遍历的特性找元素,所以应该是中序遍历,在左右递归中间填代码

还是我们之前说的“找到一个节点要做的事情,剩下的交给递归框架”,这里只不过要分一下情况,

即:一个节点到底该在那个位置做事情,即前序,中序,还是后续,就分别在递归框架的前面,中间,后面写该节点要做的事情。

代码

class Solution {
    public int kthSmallest(TreeNode root, int k) {
        List<Integer> list=new ArrayList<>();
        depth(root,list);//经过这个操作,这棵树已经按照中序遍历存放在list中,我们求第1小的,就是list中的第一个元素,即下标为0.

        return list.get(k-1);

    }
    public void depth(TreeNode root, List<Integer> list){
        if(root==null){
            return ;
        }
         depth(root.left,list);
         //这题应该用中序遍历
        list.add(root.val);//把中序遍历的结果依次存放在list中
         depth(root.right,list);

    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录