105. Construct Binary Tree from Preorder and Inorder Traversal

2021. 11. 15. 01:01Leetcode

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