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
  • 相关阅读:
    Dynamically allocated memory 动态分配内存【malloc】Memory leaks 内存泄漏
    const pointers
    heap是堆,stack是栈
    Java中使用Cookie
    Postman注册、登录、导出、导入
    HttpServletRequest get post 入参
    判断设置的时间是否大于当前时间
    JS回车登录
    一个普通的Ajax
    Java工具类
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11751001.html
Copyright © 2011-2022 走看看