Skip to content

Commit 56eafe1

Browse files
committed
Add week 2 solutions: construct-binary-tree-from-preorder-and-inorder-traversal
1 parent 24e7e83 commit 56eafe1

File tree

1 file changed

+60
-0
lines changed
  • construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

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

Comments
 (0)