Skip to content

Latest commit

 

History

History

889-ConstructBinaryTreefromPreorderandPostorderTraversal

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Construct Binary Tree from Preorder and Postorder Traversal

Problem can be found in here!

# 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
def constructFromPrePost(preorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
    def array_to_tree(left: int, right: int) -> Optional[TreeNode]:
        nonlocal postorder_index
        if left > right:
            return None
        elif left == right:
            root = TreeNode(postorder[postorder_index])
            postorder_index -= 1
            return root
        else:
            root = TreeNode(postorder[postorder_index])
            postorder_index -= 1
            preorder_index = preorder_memo[postorder[postorder_index]]
            root.right = array_to_tree(preorder_index, right)
            root.left = array_to_tree(left+1, preorder_index-1)
            return root

    preorder_memo = {}
    postorder_index = len(postorder)-1
    for index, value in enumerate(preorder):
        preorder_memo[value] = index

    return array_to_tree(0, len(preorder)-1)

Time Complexity: O(n), Space Complexity: O(n)