【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:java 多泛型参数 编辑:程序博客网 时间:2024/05/21 18:41

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

Note:

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


参考:

https://github.com/kamyu104/LeetCode/blob/master/Python/construct-binary-tree-from-inorder-and-postorder-traversal.py


这个代码会有 memory limited exceed 的错误

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def buildTree(self, inorder, postorder):        """        :type inorder: List[int]        :type postorder: List[int]        :rtype: TreeNode        """        length=len(postorder)                if length==0:            return None        if length==1:            return TreeNode(postorder[length-1])                root=TreeNode(postorder[length-1])    #LRN的最后一个点就是root                #找到root        #place=where(inorder==root)        place=inorder.index(postorder[length-1])    #在LNR里找到root的位置                #length2=len(rightinorder)          #不需要这一步,因为inorder的place的左边 和 postorder的place的左边 正好是左子树的LNR和LRN,长度是一样的                leftinorder=inorder[0:place]               #分别是左子树的inorder和postorder        leftpostorder=postorder[0:place]                rightinorder=inorder[place+1:len(inorder)]            #分别是右子树的inorder和postorder        rightpostorder=postorder[place:length-1]                root.right=self.buildTree(rightinorder,rightpostorder)     #递归左右child        root.left=self.buildTree(leftinorder,leftpostorder)                return root


下面这个还没搞懂 是哪里的区别呢

class TreeNode:    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass Solution:    # @param inorder, a list of integers    # @param postorder, a list of integers    # @return a tree node    def buildTree(self, inorder, postorder):        lookup = {}        for i, num in enumerate(inorder):            lookup[num] = i        return self.buildTreeRecu(lookup, postorder, inorder, len(postorder), 0, len(inorder))        def buildTreeRecu(self, lookup, postorder, inorder, post_end, in_start, in_end):        if in_start == in_end:            return None        node = TreeNode(postorder[post_end - 1])        i = lookup[postorder[post_end - 1]]        node.left = self.buildTreeRecu(lookup, postorder, inorder, post_end - 1 - (in_end - i - 1), in_start, i)        node.right = self.buildTreeRecu(lookup, postorder, inorder, post_end - 1, i + 1, in_end)        return node



0 0
原创粉丝点击