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