1
+
2
+ /**
3
+ * * 문제에서 정의된 타입
4
+ */
5
+ export class TreeNode {
6
+ val : number
7
+ left : TreeNode | null
8
+ right : TreeNode | null
9
+ constructor ( val ?: number , left ?: TreeNode | null , right ?: TreeNode | null ) {
10
+ this . val = ( val === undefined ? 0 : val )
11
+ this . left = ( left === undefined ? null : left )
12
+ this . right = ( right === undefined ? null : right )
13
+ }
14
+ }
15
+
16
+ /**
17
+ * ! 문제에서의 Output과 실제 정의된, 사용되는 output이 다르기 때문에, 한 번 변환 작업을 거처야함. (실제 제출 시 제외한 함수 입니다.)
18
+ */
19
+ // function treeToArray(root: TreeNode | null): (number | null)[] {
20
+ // if (!root) return [];
21
+ // const result: (number | null)[] = [];
22
+ // const queue: (TreeNode | null)[] = [root];
23
+ // while (queue.length > 0) {
24
+ // const node = queue.shift();
25
+ // if (node) {
26
+ // result.push(node.val);
27
+ // queue.push(node.left);
28
+ // queue.push(node.right);
29
+ // } else {
30
+ // result.push(null);
31
+ // }
32
+ // }
33
+ // while (result[result.length - 1] === null) result.pop();
34
+ // return result;
35
+ // }
36
+
37
+ function buildTree ( preorder : number [ ] , inorder : number [ ] ) : TreeNode | null {
38
+ if ( preorder . length === 0 || inorder . length === 0 ) return null ;
39
+
40
+ const rootVal = preorder [ 0 ] ;
41
+ const inorderIndex = inorder . indexOf ( rootVal ) ;
42
+ const leftInorder = inorder . slice ( 0 , inorderIndex ) ;
43
+
44
+ return new TreeNode (
45
+ rootVal ,
46
+ buildTree (
47
+ preorder . slice ( 1 , 1 + leftInorder . length ) ,
48
+ leftInorder
49
+ ) ,
50
+ buildTree (
51
+ preorder . slice ( 1 + leftInorder . length ) ,
52
+ inorder . slice ( inorderIndex + 1 )
53
+ ) ,
54
+ ) ;
55
+ }
56
+
57
+
58
+ // const preorder = [3, 9, 20, 15, 7];
59
+ // const inorder = [9, 3, 15, 20, 7];
60
+ // console.log('output:', treeToArray(buildTree(preorder, inorder)));
0 commit comments