File tree Expand file tree Collapse file tree 1 file changed +63
-0
lines changed
kth-smallest-element-in-a-bst Expand file tree Collapse file tree 1 file changed +63
-0
lines changed Original file line number Diff line number Diff line change
1
+ '''
2
+ # 230. Kth Smallest Element in a BST
3
+
4
+ BST์์ k ๋ฒ์งธ์ ๊ฐ ์ฐพ๊ธฐ
5
+
6
+ - Inorder Traversal: ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ์ค์ ์ํํ๋ฉด ํธ๋ฆฌ์ ๋ชจ๋ ๊ฐ์ ์ค๋ฆ ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ ์ ์๋ค.
7
+ - ์ค์ ์ํ: ์ผ์ชฝ ์์ -> ๋ฃจํธ -> ์ค๋ฅธ์ชฝ ์์
8
+ - k๋ฒ์งธ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ตฌํ๋ฉด ๋ฐฉ๋ฌธ์ ์ค๋จํ๋ค.
9
+ '''
10
+ class Solution :
11
+ '''
12
+ ## 1. count๋ฅผ ์ฌ์ฉํ์ฌ k๋ฒ์งธ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ
13
+ - ์ค์ ์ํ๋ฅผ ํ๋ฉด์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ , ๋ฐฉ๋ฌธํ ํ์๋ฅผ ์ธ์ k๋ฒ์งธ ๊ฐ์ ์ฐพ์ต๋๋ค.
14
+ - ์ํ๋ฅผ ์ค๋จํ๋ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํฉ๋๋ค.
15
+ TC: O(n)
16
+ SC: O(h) - ์ฌ๊ท ํธ์ถ ์คํ ๊ณต๊ฐ (h๋ ํธ๋ฆฌ์ ๋์ด)
17
+ '''
18
+ def kthSmallest (self , root : Optional [TreeNode ], k : int ) -> int :
19
+ count = 0
20
+ result = None
21
+
22
+ def inorder (node ):
23
+ nonlocal count , result
24
+
25
+ if not node :
26
+ return
27
+
28
+ inorder (node .left )
29
+
30
+ count += 1
31
+ if count == k :
32
+ result = node .val
33
+ return
34
+
35
+ inorder (node .right )
36
+
37
+ inorder (root )
38
+
39
+ return result
40
+
41
+ '''
42
+ ## 2. ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ์ ์ ์ฅํ์ฌ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๋ ๋ฐฉ๋ฒ
43
+ - ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ์ ์ ์ฅํ์ฌ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ต๋๋ค.
44
+ - ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํฉ๋๋ค.
45
+ TC: O(n)
46
+ SC: O(n)
47
+ '''
48
+ def kthSmallestWithResultList (self , root : Optional [TreeNode ], k : int ) -> int :
49
+ result = []
50
+
51
+ def inorder (node ):
52
+ if not node :
53
+ return
54
+ if len (result ) > k :
55
+ return node
56
+
57
+ inorder (node .left )
58
+ result .append (node .val )
59
+ inorder (node .right )
60
+
61
+ inorder (root )
62
+
63
+ return result [k - 1 ]
You canโt perform that action at this time.
0 commit comments