leetcode - 106. Construct Binary Tree from Inorder and Postorder Traversal

Description

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:
leetcode - 106. Construct Binary Tree from Inorder and Postorder Traversal_第1张图片

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.

Solution

Same as 105. Construct Binary Tree from Preorder and Inorder Traversal

Code

# 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 inorder:
            return None
        root_val = postorder[-1]
        inorder_root_index = inorder.index(root_val)
        inorder_left_vals, inorder_right_vals = inorder[:inorder_root_index], inorder[inorder_root_index + 1:]
        postorder_left_vals, postorder_right_vals = postorder[:len(inorder_left_vals)], postorder[len(inorder_left_vals):len(inorder_left_vals) + len(inorder_right_vals)]
        root = TreeNode(root_val)
        root.left = self.buildTree(inorder_left_vals, postorder_left_vals)
        root.right = self.buildTree(inorder_right_vals, postorder_right_vals)
        return root

你可能感兴趣的:(OJ题目记录,leetcode,算法,职场和发展)