Skip to content

Commit c7d7f84

Browse files
committed
update solution: construct-binary-tree-from-preorder-and-inorder-traversal 주석 수정
1 parent 838bd0f commit c7d7f84

File tree

1 file changed

+34
-10
lines changed
  • construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

+34
-10
lines changed

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

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,33 @@
1-
# Definition for a binary tree node.
2-
# class TreeNode:
3-
# def __init__(self, val=0, left=None, right=None):
4-
# self.val = val
5-
# self.left = left
6-
# self.right = right
1+
2+
'''
3+
# Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
4+
5+
use **recursive** to solve this problem.
6+
7+
## Time and Space Complexity
8+
9+
### A. recursive & change range of preorder and inorder
10+
11+
```
12+
TC: O(n)
13+
SC: O(n)
14+
```
15+
16+
### B. recursive & search index (of inorder)
17+
18+
```
19+
TC: O(n^2)
20+
SC: O(n)
21+
```
22+
23+
### C. recursive & hash table
24+
25+
```
26+
TC: O(n)
27+
SC: O(n)
28+
```
29+
30+
'''
731
class Solution:
832
'''
933
A. 재귀 풀이
@@ -33,10 +57,10 @@ def setTree(pre_left, pre_right, in_left, in_right):
3357

3458
return mid # 현재 노드 반환
3559

36-
# inorder를 값 -> 인덱스 맵핑한 딕셔너리 생성 (O(n))
60+
# inorder를 값 -> 인덱스 맵핑한 딕셔너리 생성 - TC: O(n), SC: O(n)
3761
inorder_idx_map = {value: idx for idx, value in enumerate(inorder)}
3862

39-
# 트리 생성 시작 (preorder와 inorder 전체 범위 사용)
63+
# 트리 생성 시작 (preorder와 inorder 전체 범위 사용) - TC: O(n), SC: O(n)
4064
return setTree(0, len(preorder) - 1, 0, len(inorder) - 1)
4165

4266

@@ -54,7 +78,7 @@ def setTree(pre, start, end):
5478
return None
5579

5680
val = preorder[pre] # 현재 노드의 값
57-
root = inorder.index(val) # 트리/서브트리의 루트 노드 인덱스 찾기 - SC: O(n)
81+
root = inorder.index(val) # 트리/서브트리의 루트 노드 인덱스 찾기 - TC: O(n)
5882

5983
left = setTree(pre + 1, start, root - 1)
6084
# inorder에서 root노드의 왼쪽은 왼쪽 서브트리
@@ -67,7 +91,7 @@ def setTree(pre, start, end):
6791
return TreeNode(preorder[pre], left, right) # 트리 노드 생성
6892

6993
# preorder 최초 인덱스 = 루트 노드(0), inorder의 처음(0)과 끝(len(inorder) - 1) 인덱스
70-
return setTree(0, 0, len(inorder) - 1)
94+
return setTree(0, 0, len(inorder) - 1) # TC: O(n^2), SC: O(n)
7195

7296
'''
7397
C. 재귀 풀이 + 시간 최적화

0 commit comments

Comments
 (0)