一、题目
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
个最小元素(从 1 开始计数)。
输入:root = [3,1,4,null,2], k = 1 输出:1
二、思路
* 1 中序遍历二叉搜索树为有序序列,那么找第k小可以理解为遍历到了第k个元素 * 2 我们用初始为1的temp来判断:每访问一个节点,判断是否为k;如果为k,就将该点记录; * 3 这里temp是不断累加的,只有temp==k这一次才会存储该节点的val
三、代码
class Solution {
private int temp = 1;
private int result;
public int kthSmallest(TreeNode root, int k) {
inOrder(root, k);
return this.result;
}
public void inOrder(TreeNode root, int k) {
if (root == null) return;
inOrder(root.left, k);
if (temp == k) { // 找到第k的位置
this.result = root.val;
}
temp++;
inOrder(root.right, k);
}
}