File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments