Skip to content

Commit 687f74f

Browse files
committed
feat: Add Construct Binary Tree From Preorder And Inorder Traversal solutions
1 parent c2e4b6c commit 687f74f

File tree

1 file changed

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

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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
7+
class Solution:
8+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
9+
"""
10+
Intuition:
11+
preorder ํŠธ๋ฆฌ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋Š” ํ•ญ์ƒ ๋ฃจํŠธ์ด๋‹ค.
12+
๋˜ํ•œ, inorder ํŠธ๋ฆฌ์—์„œ ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์€ left child,
13+
์˜ค๋ฅธ์ชฝ์€ right child๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
14+
๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ด์šฉํ•ด ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•œ๋‹ค.
15+
16+
Time Complexity:
17+
O(N^2):
18+
parent_idx๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ์— O(N)์ด ์†Œ์š”๋˜๊ณ 
19+
์ตœ์•…์˜ ๊ฒฝ์šฐ N๋ฒˆ ์žฌ๊ท€ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(N^2)์ด๋‹ค.
20+
21+
Space Complexity:
22+
O(N):
23+
TreeNode๋Š” N๊ฐœ์˜ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
24+
25+
Key takeaway:
26+
๋ฆฌํŠธ์ฝ”๋“œ์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•˜๋Š” ๊ฒƒ์„
27+
์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
28+
"""
29+
if not preorder:
30+
return None
31+
32+
parent = preorder[0]
33+
parent_idx = inorder.index(parent) # O(N)
34+
35+
left_pre = preorder[1 :parent_idx + 1]
36+
left_in = inorder[:parent_idx]
37+
left = self.buildTree(left_pre, left_in)
38+
39+
right_pre = preorder[1 + parent_idx:]
40+
right_in = inorder[1 + parent_idx:]
41+
right = self.buildTree(right_pre, right_in)
42+
43+
tree = TreeNode(parent, left, right)
44+
45+
return tree

0 commit comments

Comments
ย (0)