Leetcode刷题笔记-从前序与中序遍历序列构造二叉树

1. 题目

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7

2. 解答

class Solution(object):
    def buildTree(self, preorder, inorder):
        """
        :type preorder: List[int]
        :type inorder: List[int]
        :rtype: TreeNode
        """
        if not preorder: return None
        node_center_frompre = preorder[0]
        del preorder[0]
        index_center_inorder = inorder.index(node_center_frompre)
        node = TreeNode(node_center_frompre)
        node.left = self.buildTree(preorder[:index_center_inorder], inorder[:index_center_inorder])
        node.right = self.buildTree(preorder[index_center_inorder:], inorder[index_center_inorder+1:])
        return node
# preorder = [1,2,3,4,2,4,3]
# inorder = [3,2,4,1,4,2,3]
preorder = [1,4,2,3]
inorder = [1,2,3,4]
solution = Solution()
s = solution.buildTree(preorder, inorder)
print(s)

猜你喜欢

转载自www.cnblogs.com/Joyce-song94/p/9207271.html