根据前序遍历和中序遍历树构造二叉树.
样例
给出中序遍历:[1,2,3]
和前序遍历:[2,1,3]
. 返回如下的树:
2
/ \
1 3
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
"""
@param inorder: A list of integers that inorder traversal of a tree
@param postorder: A list of integers that postorder traversal of a tree
@return: Root of a tree
"""
def buildTree(self, preorder, inorder):
# write your code here
root = self.mytree(inorder, preorder)
return root
"""
@param inorder: A list of integers that inorder traversal of a tree
@param postorder: A list of integers that postorder traversal of a tree
@return: Root of a tree
"""
def buildTree(self, preorder, inorder):
# write your code here
root = self.mytree(inorder, preorder)
return root
def mytree(self, inorder, preorder):
if not inorder and not preorder:
return None
data = preorder.pop(0) # 因为postorder弹出一个元素, 所以后面的计算要考虑到
index = inorder.index(data)
root = TreeNode(data)
root.left = self.mytree(inorder[0:index], preorder[0:index])
root.right = self.mytree(inorder[index + 1:len(inorder)], preorder[index: len(preorder)])
return root
if not inorder and not preorder:
return None
data = preorder.pop(0) # 因为postorder弹出一个元素, 所以后面的计算要考虑到
index = inorder.index(data)
root = TreeNode(data)
root.left = self.mytree(inorder[0:index], preorder[0:index])
root.right = self.mytree(inorder[index + 1:len(inorder)], preorder[index: len(preorder)])
return root