Skip to content

Commit 61995ee

Browse files
Jeehay28Jeehay28
authored andcommitted
Add construct-binary-tree-from-preorder-and-inorder-traversal solution in TS
1 parent 1e14edd commit 61995ee

File tree

1 file changed

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

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
// TC: O(n)
13+
// SC: O(n)
14+
function buildTree(preorder: number[], inorder: number[]): TreeNode | null {
15+
const indices = {};
16+
// indices = {
17+
// 9: 0,
18+
// 3: 1,
19+
// 15: 2,
20+
// 20: 3,
21+
// 7: 4
22+
// }
23+
24+
for (let i = 0; i < inorder.length; i++) {
25+
const num = inorder[i];
26+
indices[num] = i;
27+
}
28+
29+
let preIndex = 0;
30+
31+
const dfs = (start: number, end: number) => {
32+
if (start > end) return null;
33+
const val = preorder[preIndex];
34+
preIndex++;
35+
const mid = indices[val];
36+
37+
const left = dfs(start, mid - 1);
38+
const right = dfs(mid + 1, end);
39+
40+
return new TreeNode(val, left, right);
41+
};
42+
43+
return dfs(0, inorder.length - 1);
44+
}

0 commit comments

Comments
 (0)