1
+ /**
2
+ * https://leetcode.com/problems/kth-smallest-element-in-a-bst/
3
+ * time complexity : O(n)
4
+ * space complexity : O(n)
5
+ */
6
+
7
+ /**
8
+ * * 문제에서 정의된 타입
9
+ */
10
+ class TreeNode {
11
+ val : number
12
+ left : TreeNode | null
13
+ right : TreeNode | null
14
+ constructor ( val ?: number , left ?: TreeNode | null , right ?: TreeNode | null ) {
15
+ this . val = ( val === undefined ? 0 : val )
16
+ this . left = ( left === undefined ? null : left )
17
+ this . right = ( right === undefined ? null : right )
18
+ }
19
+ }
20
+
21
+ /**
22
+ * ! 문제에서의 Input과 실제 정의된, 사용되는 input이 다르기 때문에, 한 번 변환 작업을 거처야함. (실제 제출 시 제외한 함수 입니다.)
23
+ */
24
+ const arrayToTreeNode = ( arr : Array < number | null > ) => ( k : number ) : [ TreeNode | null , number ] => {
25
+ let root = new TreeNode ( arr [ 0 ] ! ) ;
26
+ let queue : ( TreeNode | null ) [ ] = [ root ] ;
27
+ let i = 1 ;
28
+
29
+ while ( i < arr . length ) {
30
+ let current = queue . shift ( ) ;
31
+ if ( current !== null && current !== undefined ) {
32
+ if ( arr [ i ] !== null ) {
33
+ current . left = new TreeNode ( arr [ i ] ! ) ;
34
+ queue . push ( current . left ) ;
35
+ }
36
+ i ++ ;
37
+ if ( i < arr . length && arr [ i ] !== null ) {
38
+ current . right = new TreeNode ( arr [ i ] ! ) ;
39
+ queue . push ( current . right ) ;
40
+ }
41
+ i ++ ;
42
+ }
43
+ }
44
+
45
+ return [ root , k ] ;
46
+ }
47
+
48
+ // const input1 = arrayToTreeNode([3, 1, 4, null, 2]);
49
+ // const input2 = arrayToTreeNode([5, 3, 6, 2, 4, null, null, 1]);
50
+
51
+ // const output1 = kthSmallest(...input1(1))
52
+ // const output2 = kthSmallest(...input2(3))
53
+
54
+ // console.log('output1:', output1);
55
+ // console.log('output2:', output2);
56
+
57
+
58
+ function inOrderTraversal ( node : TreeNode | null ) : number [ ] {
59
+ if ( node === null ) {
60
+ return [ ] ;
61
+ }
62
+
63
+ return [
64
+ ...inOrderTraversal ( node . left ) ,
65
+ node . val ,
66
+ ...inOrderTraversal ( node . right )
67
+ ] ;
68
+ }
69
+
70
+ function kthSmallest ( root : TreeNode | null , k : number ) : number {
71
+ const result = inOrderTraversal ( root ) ;
72
+ return result [ k - 1 ]
73
+ }
0 commit comments