zoukankan      html  css  js  c++  java
  • LeetCode--105--从前序与中序遍历序列构造二叉树(python)

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

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

    例如,给出

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

    3
    /
    9 20
    /
    15 7

     1 class Solution:
     2     def buildTree(self, preorder, inorder):
     3         """
     4         :type preorder: List[int]
     5         :type inorder: List[int]
     6         :rtype: TreeNode
     7         """
     8         def helper(in_left = 0, in_right = len(inorder)):
     9             nonlocal pre_idx
    10             # if there is no elements to construct subtrees
    11             if in_left == in_right:
    12                 return None
    13             
    14             # pick up pre_idx element as a root
    15             root_val = preorder[pre_idx]
    16             root = TreeNode(root_val)
    17 
    18             # root splits inorder list
    19             # into left and right subtrees
    20             index = idx_map[root_val]
    21 
    22             # recursion 
    23             pre_idx += 1
    24             # build left subtree
    25             root.left = helper(in_left, index)
    26             # build right subtree
    27             root.right = helper(index + 1, in_right)
    28             return root
    29         
    30         # start from first preorder element
    31         pre_idx = 0
    32         # build a hashmap value -> its index
    33         idx_map = {val:idx for idx, val in enumerate(inorder)} 
    34         return helper()

     2019-9-20

     1 class Solution:
     2     def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
     3         if len(preorder)==0:
     4             return None
     5         if len(preorder)==1:
     6             return TreeNode(preorder[0])
     7         root = TreeNode(preorder[0])
     8         inorderL = inorder[:inorder.index(preorder[0])]
     9         inorderR = inorder[inorder.index(preorder[0])+1:]
    10         root.left = self.buildTree(preorder[1:inorder.index(preorder[0])+1],inorderL)
    11         root.right = self.buildTree(preorder[inorder.index(preorder[0])+1:],inorderR)
    12         return root

    2019-11-20 14:49:13

  • 相关阅读:
    qt忙等与非忙等
    获得文件路径 _pgmptr, _makepath, _splitpath
    RGB2YCbCr RGB2Gray
    qt Cannot connect creator comm socket /tmp/qt_temp.S26613/stub-socket: No such
    64位Ubuntu系统安装OpenCV 2.4.x+ffmpeg 完美解决方案
    vim按下ctrl+s僵死
    win32程序应用mfc库
    error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
    JavaScript中的浅拷贝和深拷贝
    Set和Map
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/11511853.html
Copyright © 2011-2022 走看看