Leetcode日記 889. 根據前序和后序遍歷構造二叉樹
給定兩個整數數組,preorder 和 postorder ,其中 preorder 是一個具有 無重復 值的二叉樹的前序遍歷,postorder 是同一棵樹的后序遍歷,重構并返回二叉樹。
如果存在多個答案,您可以返回其中 任何 一個。
示例 1:
輸入:preorder = [1,2,4,5,3,6,7], postorder = [4,5,2,6,7,3,1]
輸出:[1,2,3,4,5,6,7]
示例 2:
輸入: preorder = [1], postorder = [1]
輸出: [1]
提示:
1 <= preorder.length <= 30
1 <= preorder[i] <= preorder.length
preorder 中所有值都 不同
postorder.length == preorder.length
1 <= postorder[i] <= postorder.length
postorder 中所有值都 不同
保證 preorder 和 postorder 是同一棵二叉樹的前序遍歷和后序遍歷
# 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 constructFromPrePost(self, preorder: List[int], postorder: List[int]) -> Optional[TreeNode]:def dfs(i: int, j: int, n: int) -> Optional[TreeNode]:if n <= 0:return Noneroot = TreeNode(preorder[i])if n == 1:return rootk = pos[preorder[i + 1]]m = k - j + 1root.left = dfs(i + 1, j, m)root.right = dfs(i + m + 1, k + 1, n - m - 1)return rootpos = {x: i for i, x in enumerate(postorder)}return dfs(0, 0, len(preorder))