106 Construct Binary Tree from Inorder and Postorder Traversal

Given two integer arrays `inorder` and `postorder` where `inorder` is the inorder traversal of a binary tree and `postorder` is the postorder traversal of the same tree, construct and return the binary tree.

Example 1:

``````  3
/ \
9   20
/  \
15   7

Input: inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
Output: [3,9,20,null,null,15,7]
``````

Example 2:

``````Input: inorder = [-1], postorder = [-1]
Output: [-1]
``````

Constraints:

• `1 <= inorder.length <= 3000`
• `postorder.length == inorder.length`
• `-3000 <= inorder[i], postorder[i] <= 3000`
• `inorder` and `postorder` consist of unique values.
• Each value of `postorder` also appears in `inorder`.
• `inorder` is guaranteed to be the inorder traversal of the tree.
• `postorder` is guaranteed to be the postorder traversal of the tree.
 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 `````` ``````# 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, inorder: List[int], postorder: List[int] ) -> Optional[TreeNode]: if not postorder: return None root_val = postorder[-1] root = TreeNode(root_val) idx = inorder.index(root_val) root.left = self.buildTree(inorder[:idx], postorder[:idx]) root.right = self.buildTree(inorder[idx+1:], postorder[idx:-1]) return root``````