File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 시간 복잡도:
3
+ * preIdx를 이용하여 중위 순회 배열에서 루트 노드를 기준으로 왼쪽 서브 트리와 오른쪽 서브 트리를 탐색.
4
+ * 각 서브 트리를 재귀적으로 생성하며 모든 노드를 한 번씩 순회하므로, 시간 복잡도는 O(n)
5
+ * 공간 복잡도:
6
+ * 중위 순회 배열의 길이만큼 맵을 생성하므로, 공간 복잡도는 O(n)
7
+ */
8
+ /**
9
+ * Definition for a binary tree node.
10
+ * function TreeNode(val, left, right) {
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
+ * @param {number[] } preorder
18
+ * @param {number[] } inorder
19
+ * @return {TreeNode }
20
+ */
21
+ var buildTree = function ( preorder , inorder ) {
22
+ let preIdx = 0 ;
23
+ const inorderMap = new Map ( inorder . map ( ( e , i ) => [ e , i ] ) )
24
+
25
+ const dfs = ( l , r ) => {
26
+ if ( l > r ) {
27
+ return null ;
28
+ }
29
+ let root = preorder [ preIdx ] ;
30
+ preIdx ++ ;
31
+
32
+ let rootIdx = inorderMap . get ( root ) ;
33
+
34
+ const node = new TreeNode ( root ) ;
35
+ node . left = dfs ( l , rootIdx - 1 ) ;
36
+ node . right = dfs ( rootIdx + 1 , r ) ;
37
+ return node ;
38
+ }
39
+ return dfs ( 0 , inorder . length - 1 )
40
+ } ;
You can’t perform that action at this time.
0 commit comments