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
            
    

      

  • 相关阅读:
    opencv入门踩坑之路(一)
    编写vue的时候(html也一样),限制一个div内可显示的字数
    win10开机后内存占用非常高,但是资源管理器显示的进程占用得很少,可以考虑更新驱动
    java 随机数产生 常用类及方法
    你不会的是这个正则表达式吗?
    系统编程第三次上机
    Java第三次上机随笔
    系统编程第二次实验
    Java第二次上机随笔
    面向对象-Java MOOC翁恺老师第一次作业
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6625234.html
Copyright © 2011-2022 走看看