https://leetcode.com/problems/kth-smallest-element-in-a-bst
- 이진 검색 트리는 모든 하위 트리가 왼쪽 노드의 값 < 루트 노드의 값 < 오른쪽 노드의 값이다.
🧐 왼쪽 리프 노드의 값부터 탐색하자
➡️ [최소값 - 두번째 최소값 - 세번째 최소값 ... - k번째 최소값] 순으로 값을 찾아나갈 수 있다.
void recursive(TreeNode 노드){
if(list size == k) return;
if(node.left != null) recursive(node.left);
list.add(노드의 값);
if(node.right != null) recursive(node.right);
}
public int kthSmallest(TreeNode root, int k) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
// Decrease k since we've visited one element
k--;
if (k == 0) {
break; // Break the loop as we've found the kth smallest element
}
root = root.right;
}
return root.val; // Return the value of the kth smallest element
}
스택과 while문을 활용
1. [] ➡️ [5, 3, 2, 1]
root 노드의 왼쪽 노드들을 전부 스택에 집어넣는다.
나는 이진 검색 트리를 재귀로밖에 접근하지 못하겠어서, 재귀가 아닌 다른 풀이를 살펴봤다.
한단계 한단계 살펴보니까 이해되어서 다음번에는 한번 while문과 stack을 이용해서 풀이해봐야겠다.