Skip to content

Commit 0cd8a25

Browse files
committed
construct-binary-tree-from-preorder-and-inorder-traversal solution (py)
1 parent 65c6b77 commit 0cd8a25

File tree

1 file changed

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

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""
2+
https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
3+
두 개의 정수 배열 preorder와 inoder가 주어졌을 때 이진 트리를 구성하고 반환하시오.
4+
preorder = 전위 순회 : 루트 -> 왼쪽 서브트리 -> 오른쪽 서브트리
5+
inorder = 중위 순회 : 왼쪽 서브트리 -> 루트 -> 오른쪽 서브트리
6+
7+
TC: O(n), n: 노드 수
8+
SC: O(n)
9+
"""
10+
11+
from typing import Optional, List
12+
13+
# Definition for a binary tree node.
14+
class TreeNode:
15+
def __init__(self, val=0, left=None, right=None):
16+
self.val = val
17+
self.left = left
18+
self.right = right
19+
20+
class Solution:
21+
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
22+
if not preorder or not inorder:
23+
return None
24+
25+
# 1. preorder의 첫 값이 root
26+
root_val = preorder[0]
27+
root = TreeNode(root_val)
28+
29+
# 2. inorder에서 root 위치 찾기
30+
root_index = inorder.index(root_val)
31+
32+
# 3. 왼쪽, 오른쪽 나눠서 재귀적으로 연결
33+
root.left = self.buildTree(preorder[1:root_index + 1], inorder[:root_index])
34+
root.right = self.buildTree(preorder[root_index + 1:], inorder[root_index + 1:])
35+
36+
return root

0 commit comments

Comments
 (0)