230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
private static Helper solve(TreeNode root, int k) {
if (root == null) {
return new Helper(0, null);
}
Helper left = solve(root.left, k);
if (left.value != null) {
return left;
}
if (left.num + 1 == k) {
return new Helper(k, root);
}
Helper right = solve(root.right, k - left.num - 1);
if (right.value != null) {
return right;
}
return new Helper(left.num + 1 + right.num, null);
}
public static int kthSmallest(TreeNode root, int k) {
return solve(root, k).value.val;
}
public static void main(String[] args) {
TreeNode n5 = new TreeNode(5);
TreeNode n3 = new TreeNode(3);
TreeNode n6 = new TreeNode(6);
n5.left = n3;
n5.right = n6;
TreeNode n2 = new TreeNode(2);
TreeNode n4 = new TreeNode(4);
n3.left = n2;
n3.right = n4;
n2.left = new TreeNode(1);
System.out.println(kthSmallest(n5, 3));
}
}
class Helper {
int num;
TreeNode value;
public Helper(int num, TreeNode value) {
this.num = num;
this.value = value;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
心之所向,素履以往 生如逆旅,一苇以航