LeetCode 刷题之旅(.05.22)——105. 从前序与中序遍历序列构造二叉树(中)
题目:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3/ \9 20/ \15 7
解题模板:
Python 3:
# Definition for a binary tree node.# class TreeNode:#def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
解题思路:
递归法:按照先左子树,后右子树的顺序递归,直到数组的先序列表和中序列表中的元素都用完为止。
解法:
class Solution:def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:if not preorder or not inorder:returnroot = TreeNode(preorder[0])num = inorder.index(preorder[0])root.left = self.buildTree(preorder[1 : 1 + num], inorder[: num])root.right = self.buildTree(preorder[1 + num:], inorder[num + 1:])return root
时间复杂度O(N)
空间复杂度O(1)
如果觉得《LeetCode 刷题之旅(.05.22)——105. 从前序与中序遍历序列构造二叉树(中)》对你有帮助,请点赞、收藏,并留下你的观点哦!