【leetcode系列】【算法】【中等】从前序与中序遍历序列构造二叉树

题目:

题目链接: https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

解题思路:

前序遍历:根节点 -> 左子树 -> 右子树

中序遍历:左子树 -> 根节点 -> 右子树

后序遍历:左子树 -> 右子树 -> 根节点

根据遍历规则,在知道前序遍历的第一个值就是当前的根节点

因为题目中说明没有重复值,所以使用根节点的值,将中序遍历分为左右两部分,左边的值为左子树,右边的值为右子树

重复此步骤,直到所有元素都用完为止

代码实现:

# 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, preorder: List[int], inorder: List[int]) -> TreeNode:
        def build_help(preorder, inorder):
            if 0 == len(preorder) or 0 == len(inorder):
                return None
            
            in_index = inorder.index(preorder[0])
            if in_index == -1:
                return None
            
            node = TreeNode(preorder[0])
            del preorder[0]
            del inorder[in_index]
            node.left = build_help(preorder, inorder[:in_index])
            node.right = build_help(preorder, inorder[in_index:])
            return node
        
        return build_help(preorder, inorder)
发布了100 篇原创文章 · 获赞 4 · 访问量 1457

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105401308