Skip to content

Commit 029599b

Browse files
committed
add week 1 solutions: kth-smallest-element-in-a-bst
1 parent e7c8954 commit 029599b

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

Comments
 (0)