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

  • 相关阅读:
    MySQL启动报错Starting MySQL. ERROR! The server quit without updating PID file
    vue安装
    web漏洞分析防御
    dedecms三级目录
    阿里云Linux服务器漏洞修复
    Windows下elasticsearch安装并且同步数据库
    解决ecshop清除缓存css样式没反应问题
    PHP正则匹配替换图片地址
    阿里云漏洞修复
    Apache Pig
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/11511853.html
Copyright © 2011-2022 走看看