zoukankan      html  css  js  c++  java
  • [LC] 105. Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree.

    Note:
    You may assume that duplicates do not exist in the tree.

    For example, given

    preorder = [3,9,20,15,7]
    inorder = [9,3,15,20,7]

    Return the following binary tree:

        3
       / 
      9  20
        /  
       15   7

    # 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:
            if not preorder or not inorder:
                return
            my_dict = {}
            for i, node in enumerate(inorder):
                my_dict[node] = i
            return self.helper(0, preorder, 0, len(inorder) - 1, inorder, my_dict)
    
        
        def helper(self, pre_left,  preorder, in_left, in_right, inorder, my_dict):
            if in_right < in_left:
                return None
            cur_val = preorder[pre_left]
            cur = TreeNode(cur_val)
            left_size = my_dict[cur_val] - in_left
            in_index = my_dict[cur_val]
            
            cur.left = self.helper(pre_left + 1, preorder, in_left, in_left + left_size - 1, inorder, my_dict)
            # For pre_left, need to add 1 in additional to left_size
            cur.right = self.helper(pre_left + left_size + 1, preorder, in_left + left_size + 1, in_right, inorder, my_dict)
            return cur
  • 相关阅读:
    CSP 训练赛0925
    赛道修建 NOIP 2018
    C
    B
    游戏得分 建立反图SPFA / bellman
    肥宅快乐树 换根+树形DP/dfs
    组合数例题
    龙珠雷达 双指针+DP
    面试-restful规范
    django-中间件
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11751001.html
Copyright © 2011-2022 走看看