# Given preorder and inorder traversal of a tree, construct the binary tree.

# Note:
# You may assume that duplicates do not exist in the tree.

# For example, given

# preorder = [3,9,20,15,7]
# inorder = [9,3,15,20,7]
# Return the following binary tree:

#     3
#    / \
#   9  20
#     /  \
#    15   7


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def buildTree(self, preorder: 'list[int]', inorder: 'list[int]') -> TreeNode:
        if inorder:
            rootval = preorder.pop(0)
            indexOfRoot = inorder.index(rootval)

            root = TreeNode(rootval)
            root.left = self.buildTree(preorder, inorder[:indexOfRoot])
            root.right = self.buildTree(preorder, inorder[(indexOfRoot + 1):])

            return root

# Given preorder and inorder traversal of a tree, construct the binary tree.

# Note:
# You may assume that duplicates do not exist in the tree.

# For example, given

# preorder = [3,9,20,15,7]
# inorder = [9,3,15,20,7]
# Return the following binary tree:

#     3
#    / \
#   9  20
#     /  \
#    15   7


class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def buildTree(self, preorder: 'list[int]', inorder: 'list[int]') -> TreeNode:
        if inorder:
            rootval = preorder.pop(0)
            indexOfRoot = inorder.index(rootval)

            root = TreeNode(rootval)
            root.left = self.buildTree(preorder, inorder[:indexOfRoot])
            root.right = self.buildTree(preorder, inorder[(indexOfRoot + 1):])

            return root

# Given preorder and inorder traversal of a tree, construct the binary tree. # Note: # You may assume that duplicates do not exist in the tree. # For example, given # preorder = [3,9,20,15,7] # inorder = [9,3,15,20,7] # Return the following binary tree: #     3 #    / \ #   9  20 #     /  \ #    15   7