Leetcode Java Kth Smallest Element in a BST
업데이트:
문제
코드
class Solution {
public int kthSmallest(TreeNode root, int k) {
Stack<TreeNode> stack = new Stack<>();
while (root != null) {
stack.push(root);
root = root.left;
}
while (k != 0) {
TreeNode n = stack.pop();
if (--k == 0) {
return n.val;
}
TreeNode right = n.right;
while (right != null) {
stack.push(right);
right = right.left;
}
}
return -1;
}
}
결과
설명
- 주어진 TreeNode인 root에서 k번째로 작은 값을 찾는 문제이다.
- root의 자식 노드들 순차적으로 넣을 stack을 정의한다.
-
root가 null이 되기 전까지 root를 넣고, root에 root의 left Treenode를 넣어준다.
- k가 0이 아닐 때 까지 반복하여 k번째로 작은 값을 찾는다.
- stack에서 최근 넣은 TreeNode를 꺼내 지역 변수 n에 넣어준다.
- k를 감소시킨 값이 0인 경우 n의 val 값이 k번째로 작은 값이므로, n.val의 값을 주어진 문제의 결과로 반환한다.
- n의 right TreeNode를 지역 변수 right에 넣어준다.
- right가 null이 아닐 때 까지 반복하여 stack에 right를 넣고, 다음으로 right에 right의 left TreeNode를 넣어준다.
- 반복이 완료되면 해당 값이 존재하지 않으므로, -1을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기