Skip to content

Commit b0361ee

Browse files
committed
add Construct Binary Tree From Preorder And Inorder Traversal solution
1 parent a1ad225 commit b0361ee

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* [Problem]: [105] Construct Binary Tree From Preorder And Inorder Traversal
3+
* (https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/)
4+
*/
5+
6+
class TreeNode {
7+
val: number;
8+
left: TreeNode | null;
9+
right: TreeNode | null;
10+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
11+
this.val = val === undefined ? 0 : val;
12+
this.left = left === undefined ? null : left;
13+
this.right = right === undefined ? null : right;
14+
}
15+
}
16+
17+
//시간복잡도 O(n)
18+
//공간복잡도 O(n)
19+
function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
20+
if (!preorder.length || !inorder.length) return null;
21+
22+
const map = new Map<number, number>();
23+
let idx = 0;
24+
25+
inorder.forEach((v, i) => map.set(v, i));
26+
27+
function dfs(left: number, right: number): TreeNode | null {
28+
if (left > right) return null;
29+
30+
const value = preorder[idx++];
31+
const root = new TreeNode(value);
32+
const index = map.get(value)!;
33+
34+
root.left = dfs(left, index - 1);
35+
root.right = dfs(index + 1, right);
36+
37+
return root;
38+
}
39+
40+
return dfs(0, inorder.length - 1);
41+
}

0 commit comments

Comments
 (0)