Construct Binary Tree from Inorder and Postorder Traversal

https://leetcode.com/explore/learn/card/data-structure-tree/133/conclusion/942/

这道题很高频,也是有难点。trick的地方在于我们要知道两个特性

(1)当前的node的值在postorder的最后一个

(2) inorder 值得两边是它left,right subtree的 值得array

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        def dfs(l,r):
            if l > r:
                return
            val = postorder.pop()
            root = TreeNode(val)
            idx = inorder.index(val)
            root.right = dfs(idx+1,r)
            root.left = dfs(l,idx-1)
            
            return root
            
        n = len(inorder)
        return dfs(0,n-1)

Last updated

Was this helpful?