天天看點

LeetCode106_從中序與後序周遊序列構造二叉樹

1. 題目

給定兩個整數數組 inorder 和 postorder ,其中 inorder 是二叉樹的中序周遊, postorder 是同一棵樹的後序周遊,請你構造并傳回這顆 二叉樹 。

提示:
1 <= inorder.length <= 3000
postorder.length == inorder.length
-3000 <= inorder[i], postorder[i] <= 3000      

2. 題解

from typing import List


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]) -> TreeNode:
        if not inorder and not postorder:
            return None

        root_val = postorder[len(postorder) - 1]
        root = TreeNode(root_val)
        i = inorder.index(root_val)  # i = 1
        root.left = self.buildTree(inorder[: i], postorder[: i])
        root.right = self.buildTree(inorder[i + 1:], postorder[i: -1])
        return