leetcode:从前序与中序遍历序列构造二叉树(python)

1. 题目描述

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

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

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

     3
    / \
   9  20
  / \
 15   7

2. 思路

剑指offer中有这样一道题。还是利用递归,主要是根据先序遍历和中序遍历的特点找到左子树的先序遍历序列和中序遍历序列,找到右子树的先序遍历序列和中序遍历序列。然后进行递归。

2. python代码

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if len(preorder) == 0:
            return None
        index = inorder.index(preorder[0])
        leftInorder = inorder[:index]
        rightInorder = inorder[index+1:]
        leftPreorder = preorder[1:len(leftInorder)+1]
        rightPreorder = preorder[len(leftInorder)+1:]
        root = TreeNode(preorder[0])
        root.left = self.buildTree(leftPreorder,leftInorder)
        root.right = self.buildTree(rightPreorder,rightInorder)
        return root

你可能感兴趣的:(leetcode)