Skip to content

Commit fb0dab1

Browse files
committed
feat: construct binary tree from preorder and inorder traversal
1 parent 3e03de7 commit fb0dab1

File tree

1 file changed

+40
-0
lines changed
  • construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
};

0 commit comments

Comments
 (0)