230. 二叉搜索树中第K小的元素
题目
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。
输入:root = [3,1,4,null,2], k = 1
输出:1
思路(灵茶山)
中序遍历就是在从小到大遍历节点值,所以遍历到的第 k 个节点值就是答案。
答案用一个外部变量ans记录
前置递减操作符 --,它首先将 k 的值减少 1,然后再与 0 进行比较。
代码
/**
* 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。
*/
public class o230 {
int res;
int k;
public int kthSmallest(TreeNode root, int k) {
this.k = k;
dfs(root);
return res;
}
private void dfs(TreeNode root) {
if (root == null) {
return;
}
dfs(root.left);
if (--k == 0) {
res = root.val;
return;
}
dfs(root.right);
}
public static void main(String[] args) {
TreeNode n2 = new TreeNode(2);
TreeNode n1 = new TreeNode(1, null, n2);
TreeNode n4 = new TreeNode(4);
TreeNode root = new TreeNode(3, n1, n4);
o230 main = new o230();
System.out.println(main.kthSmallest(root, 1));
}
}

浙公网安备 33010602011771号