leetcode-python-从前序与中序遍历序列构造二叉树

由前序的特点,第一个必定是root结点

由中序的特点,根节点左侧为左子树,右侧为右子树。

递归流程为:

1)从preorder中找到根节点

2)从inorder中拆分出左右子树

3)按长度在preorder中继续找到左右子树的preorder进行递归建树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if not preorder:
            return None
        
        root = TreeNode(preorder[0])        
        left_inorder = inorder[: inorder.index(root.val)]
        right_inorder = inorder[inorder.index(root.val) + 1 :]
        
        l_left = len(left_inorder)
        left_preorder = preorder[1:l_left + 1]
        right_preorder = preorder[l_left + 1 :]
        
        root.left = self.buildTree(left_preorder, left_inorder)
        root.right = self.buildTree(right_preorder, right_inorder)
        
        return root

        

 

posted @ 2021-06-17 15:13  泊鸽  阅读(83)  评论(0)    收藏  举报