• 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
            
    

      

  • 相关阅读:
    QML的一些基础的区分
    qml的一个文章----可以看出状态、动画的使用
    凡是人性的,都是如下的
    全国经纬度,具体到县
    web-nodkit 入门
    一个文章-转年收入50万美元的软件工程师做的是什么类型的工作
    qml 封装技巧-利用数据来进行适配
    windbg内核诊断方式--转载
    Windbg程序调试--转载
    编写你自己的单点登录(SSO)服务
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6625234.html
Copyright © 2020-2023  润新知