59 lines
1.2 KiB
Java
59 lines
1.2 KiB
Java
/*
|
|
* @lc app=leetcode id=230 lang=java
|
|
*
|
|
* [230] Kth Smallest Element in a BST
|
|
*/
|
|
|
|
// @lc code=start
|
|
/**
|
|
* Definition for a binary tree node.
|
|
* public 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;
|
|
* }
|
|
* }
|
|
*/
|
|
class Solution {
|
|
|
|
static class State{
|
|
int result;
|
|
int order;
|
|
int targetOrder;
|
|
boolean found;
|
|
}
|
|
|
|
public int kthSmallest(TreeNode root, int k) {
|
|
State st = new State();
|
|
st.found = false;
|
|
st.targetOrder = k;
|
|
st.order = 0;
|
|
travel(root, st);
|
|
return st.result;
|
|
}
|
|
|
|
private void travel(TreeNode node, State st) {
|
|
if(node == null) {
|
|
return;
|
|
}
|
|
travel(node.left, st);
|
|
st.order++;
|
|
if(st.found) {
|
|
return;
|
|
} else if(st.order == st.targetOrder) {
|
|
st.result = node.val;
|
|
st.found = true;
|
|
} else {
|
|
travel(node.right, st);
|
|
}
|
|
}
|
|
}
|
|
// @lc code=end
|
|
|