/* * @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