(Leetcode) 230 - Kth Smallest Element in a BST
기회가 되어 달레님의 스터디에 참여하여 시간이 될 때마다 한문제씩 풀어보고 있다.
https://leetcode.com/problems/kth-smallest-element-in-a-bst/
내가 작성한 풀이
class Solution {
public int kthSmallest(TreeNode root, int k) {
return dfs(root, new Holder(k));
}
public int dfs(TreeNode root, Holder holder) {
if(root.left != null) {
int left = dfs(root.left, holder);
if (left != -1) {
return left;
}
}
holder.decrease();
if (holder.k == 0) {
return root.val;
}
if(root.right != null) {
int right = dfs(root.right, holder);
if (right != -1) {
return right;
}
}
return -1;
}
}
class Holder {
int k;
public Holder(int k) {
this.k = k;
}
public void decrease() {
this.k = this.k - 1;
}
}
Holder 라는 객체를 만든 이유는 k의 값을 int 값으로 전달하는 것이 아닌 reference 타입으로 전달 되게 하여 dfs 과정중 모든 스택에서 동일한 값을 바라볼 수 있도록 하기 위함이다.
TC, SC
시간 복잡도는 O(n)이고, 공간 복잡도는 O(n)이다. 트리가 균등할 경우 O(logn)에 가까워진다.