Skip to content

Latest commit

 

History

History
63 lines (46 loc) · 1.25 KB

106. Construct Binary Tree from Inorder and Postorder Traversal.md

File metadata and controls

63 lines (46 loc) · 1.25 KB

106. Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree.

Note: You may assume that duplicates do not exist in the tree.

For example, given

inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]

Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

Solution

和105几乎一样,preorde改成postorder那就从后面直接pop就好了。

Code

# 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, postorder):
        """
        :type inorder: List[int]
        :type postorder: List[int]
        :rtype: TreeNode
        """
        if len(inorder) == 0:
            root = None
        else:
            # print('i',inorder)
            # print('p',postorder)
            root_val = postorder[-1]
            index = inorder.index(root_val)
            root = TreeNode(root_val)
            root.left = self.buildTree(inorder[:index],postorder[:index])
            root.right = self.buildTree(inorder[index+1:],postorder[index:-1])
            
        return root