Skip to content

Commit

Permalink
update solution: construct-binary-tree-from-preorder-and-inorder-trav…
Browse files Browse the repository at this point in the history
…ersal 주석 수정
  • Loading branch information
dusunax committed Dec 20, 2024
1 parent 838bd0f commit c7d7f84
Showing 1 changed file with 34 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,33 @@
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right

'''
# Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
use **recursive** to solve this problem.
## Time and Space Complexity
### A. recursive & change range of preorder and inorder
```
TC: O(n)
SC: O(n)
```
### B. recursive & search index (of inorder)
```
TC: O(n^2)
SC: O(n)
```
### C. recursive & hash table
```
TC: O(n)
SC: O(n)
```
'''
class Solution:
'''
A. 재귀 풀이
Expand Down Expand Up @@ -33,10 +57,10 @@ def setTree(pre_left, pre_right, in_left, in_right):

return mid # 현재 노드 반환

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

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


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

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

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

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

'''
C. 재귀 풀이 + 시간 최적화
Expand Down

0 comments on commit c7d7f84

Please sign in to comment.