zoukankan      html  css  js  c++  java
  • LeetCode 106. 从中序与后序遍历序列构造二叉树

    106. 从中序与后序遍历序列构造二叉树

    Difficulty: 中等

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

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

    例如,给出

    中序遍历 inorder = [9,3,15,20,7]
    后序遍历 postorder = [9,15,7,20,3]
    

    返回如下的二叉树:

        3
       / 
      9  20
        /  
       15   7
    

    Solution

    Language: 全部题目

    # 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, inorder: List[int], postorder: List[int]) -> TreeNode:
            def buildHelper(pos_left, pos_right, in_left, in_right):
                if pos_right < pos_left: return None
    ​
                pos_root = pos_right
                in_root = index[postorder[pos_root]]
    ​
                root = TreeNode(postorder[pos_root])
                left_subtree_size = in_root - in_left # 属于左子树的节点的数量
                root.left = buildHelper(pos_left, pos_left+left_subtree_size-1, in_left, in_root-1)
                root.right = buildHelper(pos_left+left_subtree_size, pos_right-1, in_root+1, in_right)
                return root
    ​
            n = len(inorder)
            index = {e: i for i, e in enumerate(inorder)}
            return buildHelper(0, n-1, 0, n-1)
    
  • 相关阅读:
    求最大子数组02
    求最大子数组
    第3周学习进度
    四则运算3
    第2周学习进度
    构建之法阅读笔记02
    四则运算2及单元测试
    四则运算1
    第1周学习进度
    构建之法阅读笔记01
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14034840.html
Copyright © 2011-2022 走看看