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