zoukankan      html  css  js  c++  java
  • LeetCode 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.

    解题思路

    代码实现

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def help1(self, pre, begin1, end1, ino, begin2, end2):
            if(begin1 > end1):
                return None
            elif(begin1 == end1):
                return TreeNode(pre[begin1])
            root = TreeNode(pre[begin1])
            temp = pre[begin1]
            index = begin2
            for i in ino:
                if temp == i:
                    break
                index += 1
            length = index - begin1
            root.left = self.help1(pre, begin1+1, begin1+length, ino, begin2, begin2+length-1)
            root.right = self.help1(pre, begin1+length+1, end1, ino, begin2+length+1, end2)
            
            return root
            
        def buildTree(self, preorder, inorder):
            """
            :type preorder: List[int]
            :type inorder: List[int]
            :rtype: TreeNode
            """
            return self.help1(preorder, 0, len(preorder)-1, inorder, 0, len(inorder)-1)
        # // 上面的解法用c++是可以ac的,但是python默认的递归深度只有900(这里不能调整),所以会显示maximum recursion depth exceeded    
    # 方法二
    # class Solution(object):
    #     def buildTree(self, preorder, inorder):
    #         """
    #         :type preorder: List[int]
    #         :type inorder: List[int]
    #         :rtype: TreeNode
    #         """
    #         root = None
                # 边界条件是inorder为空,而不是preorder,因为若为preoder则左子树完成后跳不出循环
    #         if inorder:
    #             index = inorder.index(preorder[0])
    #             # 这里方法很巧妙,每次我都删掉,left递归回来的时候左子树正好删完了
    #             del preorder[0]
    #             root = TreeNode(inorder[index])
    #             root.left = self.buildTree(preorder, inorder[:index])
    #             root.right = self.buildTree(preorder, inorder[index+1:])
                
    #         return root
            
    

      

  • 相关阅读:
    IntelliJ IDEA教程之如何clean或者install Maven项目
    mysql 导出表,导出数据 命令
    import require
    https确实加密了。 抓包是一个中间人攻击过程
    密码学部分算法
    账号密码加密的方案
    查看git提交细节
    使用源安装java JDK
    updated stream stash changes
    Hibernate与Jpa的关系
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6625234.html
Copyright © 2011-2022 走看看