박종훈 알고리즘 블로그

(Leetcode) 230 - Kth Smallest Element in a BST

기회가 되어 달레님의 스터디에 참여하여 시간이 될 때마다 한문제씩 풀어보고 있다.

https://neetcode.io/practice


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)에 가까워진다.

categories: 스터디-알고리즘

tags: 자바 , java , 리트코드 , Leetcode , 알고리즘 , tree , dfs , reference