Skip to content

Commit 4ddb7c6

Browse files
committed
feat: [Week 02-4] solve construct-binary-tree-from-preorder-and-inorder-traversal
1 parent 6642c7b commit 4ddb7c6

File tree

1 file changed

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

1 file changed

+29
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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+
8+
"""
9+
1) preorder 의 경우 젤 첫번째 노드가 최상단 노드라는 보장이 있음
10+
2) inorder 의 경우 preorder 에서의 첫번째 node 를 기준으로 왼쪽이 left 노드, 오른찍이 right 노드라는 보장이 있음
11+
3) preorder 에서 left, right의 갯수는 inorder에서 찾은 root node 의 인덱스 를 활용할 수 있음
12+
13+
Time: O(n^2)
14+
Space: O(n^2)
15+
"""
16+
17+
18+
class Solution:
19+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
20+
if not preorder or not inorder:
21+
return None
22+
23+
newNode = TreeNode()
24+
newNode.val = preorder[0]
25+
mid = inorder.index(preorder[0])
26+
newNode.left = self.buildTree(preorder[1 : mid + 1], inorder[:mid])
27+
newNode.right = self.buildTree(preorder[mid + 1 :], inorder[mid + 1 :])
28+
29+
return newNode

0 commit comments

Comments
 (0)