Skip to content

Commit 6485b40

Browse files
author
แ„‹แ…ตแ„‹แ…งแ†ซแ„‰แ…ฎ
committed
kth smallest element in a bst
1 parent 69410d0 commit 6485b40

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package leetcode_study
2+
3+
/**
4+
* binary search tree์—์„œ k ๋ฒˆ์งธ ์ž‘์€ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ
5+
* stack ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
6+
*
7+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) or O(logn)
8+
* -> 2๋ฒˆ์˜ loop์„ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ œํ•œ๋œ n ์•ˆ์—์„œ ์ˆœํšŒ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(n)์„ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
9+
* -> ๋งŒ์•ฝ BST๊ฐ€ ๊ท ํ˜•์ด ์žกํ˜€ ์žˆ๋‹ค๋ฉด O(logn)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
12+
* -> ํƒ์ƒ‰ํ•œ node๋ฅผ ์ €์žฅํ•  stack ๊ณต๊ฐ„
13+
*/
14+
fun kthSmallest(root: TreeNode?, k: Int): Int {
15+
val stack = ArrayDeque<TreeNode>()
16+
var current = root
17+
var count = 0
18+
19+
while (stack.isNotEmpty() || current != null) {
20+
// ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๊ณ„์† ํƒ์ƒ‰ํ•˜์—ฌ stack์— ์ถ”๊ฐ€
21+
while (current != null) {
22+
stack.addLast(current)
23+
current = current.left
24+
}
25+
26+
// ๊ฐ€์žฅ ์™ผ์ชฝ ๋…ธ๋“œ๋ฅผ pop
27+
current = stack.removeLast()
28+
count++
29+
30+
// k๋ฒˆ์งธ ๋…ธ๋“œ๋ผ๋ฉด ๊ฐ’ ๋ฐ˜ํ™˜
31+
if (count == k) return current.`val`
32+
33+
// ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ํƒ์ƒ‰
34+
current = current.right
35+
}
36+
37+
return -1 // ์ด๋ก ์ ์œผ๋กœ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„
38+
}

0 commit comments

Comments
ย (0)