105. Construct Binary Tree from Preorder and Inorder Traversal
2021. 11. 15. 01:01ㆍLeetcode
Description:
Given two integer arrays preorder and inorder where preorder is the preorder traversal of a binary tree and inorder is the inorder traversal of the same tree, construct and return the binary tree.

# 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
'''
[1] divide and set)
idea::
set root using preorder, divide left-subtree and right-subtree using inorder
code::
(below)
-T/C: O(n)
-S/C: O(n) # for making tree
'''
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
return self.builder(preorder,inorder)
def builder(self, preorder,inorder):
# exception
if len(preorder)<=0:
return None
# set root
root=TreeNode(preorder[0])
# find root' idx
root_idx=0
for i,num in enumerate(inorder):
if num==root.val:
root_idx=i
break
# divide
left_size=root_idx
# set left and right
root.left=self.builder(preorder[1:left_size+1],inorder[0:left_size])
root.right=self.builder(preorder[1+left_size:],inorder[root_idx+1:])
return root'Leetcode' 카테고리의 다른 글
| 297. Serialize and Deserialize Binary Tree (0) | 2021.11.15 |
|---|---|
| 124. Binary Tree Maximum Path Sum (0) | 2021.11.15 |
| 572. Subtree of Another Tree (0) | 2021.11.15 |
| 102. Binary Tree Level Order Traversal (0) | 2021.11.14 |
| 104. Maximum Depth of Binary Tree (0) | 2021.11.12 |