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);
}
}