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