# 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
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
root = tree = TreeNode(preorder[0])
stack = [[inorder.index(preorder[0]), tree]]
for num in preorder[1:]:
index = inorder.index(num)
tree = TreeNode(num)
if index < stack[-1][0]:
stack[-1][1].left = tree
else:
while stack and index > stack[-1][0]:
pre = stack.pop()
pre[1].right = tree
stack.append([index, tree])
return root