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 = None
class 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 = None
class 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