Skip to content

Commit 97eb6f9

Browse files
committed
feat: add Solution for 최적화
1 parent 717a132 commit 97eb6f9

File tree

1 file changed

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

1 file changed

+28
-0
lines changed

construct-binary-tree-from-preorder-and-inorder-traversal/Chaedie.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,31 @@ def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNod
2727
newNode.right = self.buildTree(preorder[mid + 1 :], inorder[mid + 1 :])
2828

2929
return newNode
30+
31+
'''
32+
알고달레 참고해서 최적화 진행했습니다.
33+
1) 시간복잡도 최적화: dictionary 를 활용해 mid 를 찾는 index 메서드 제거
34+
2) 공간복잡도 최적화: preorder, inorder 배열을 넘기는것이 아닌 index 만 넘김
35+
36+
Time: O(n)
37+
Space: O(n)
38+
39+
'''
40+
41+
class Solution:
42+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
43+
indices = { val: idx for idx, val in enumerate(inorder) }
44+
pre_iter = iter(preorder)
45+
46+
def dfs(start, end):
47+
if start > end:
48+
return None
49+
50+
val = next(pre_iter)
51+
mid = indices[val]
52+
53+
left = dfs(start, mid - 1)
54+
right = dfs(mid + 1, end)
55+
return TreeNode(val, left, right)
56+
57+
return dfs(0, len(inorder) - 1)

0 commit comments

Comments
 (0)