File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 1+ // 접근법
2+ // preorder: v l r
3+ // inorder: l v r
4+
5+ // preorder의 가장 첫 요소는 무조건 root
6+ // inorder에서 root보다 왼쪽에 있는 요소는 전부 left임
7+ // 여기서 중복되는 value가 없어야 하는데 문제에서 없음을 보장함
8+ // 따라서 preorder[0]을 inorder에서 찾고
9+ // 그 왼쪽, 오른쪽으로 배열을 나눠서 이걸 반복
10+
11+ /**
12+ * Definition for a binary tree node.
13+ * function TreeNode(val, left, right) {
14+ * this.val = (val===undefined ? 0 : val)
15+ * this.left = (left===undefined ? null : left)
16+ * this.right = (right===undefined ? null : right)
17+ * }
18+ */
19+ /**
20+ * @param {number[] } preorder
21+ * @param {number[] } inorder
22+ * @return {TreeNode }
23+ */
24+ const buildTree = function ( preorder , inorder ) {
25+ let preorderIndex = 0 ;
26+ const map = inorder . reduce ( ( map , val , index ) => {
27+ map [ val ] = index ;
28+ return map ;
29+ } , { } ) ;
30+
31+ function build ( start , end ) {
32+ if ( start > end ) {
33+ return null ;
34+ }
35+
36+ const root = new TreeNode ( preorder [ preorderIndex ++ ] ) ;
37+ const index = map [ root . val ] ;
38+
39+ root . left = build ( start , index - 1 ) ;
40+ root . right = build ( index + 1 , end ) ;
41+
42+ return root ;
43+ }
44+
45+ return build ( 0 , inorder . length - 1 ) ;
46+ } ;
47+
48+ // 시간복잡도: O(n)
49+ // 공간복잡도: O(n)
You can’t perform that action at this time.
0 commit comments