描述
根据中序遍历和后序遍历树构造二叉树
你可以假设树中不存在相同数值的节点
您在真实的面试中是否遇到过这个题?
是
样例
给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]
返回如下的树:
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, inorder, postorder):
# write your code here
return self.mytree(inorder, postorder)
def mytree(self, inorder, postorder):
if not inorder or not postorder:
return None
data = postorder.pop() # 因为postorder弹出一个元素, 所以后面的计算要考虑到
index = inorder.index(data)
root = TreeNode(data)
root.left = self.mytree(inorder[0:index], postorder[0:index])
root.right = self.mytree(inorder[index+1:len(inorder)], postorder[index: len(postorder)])
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, inorder, postorder):
# write your code here
return self.mytree(inorder, postorder)
def mytree(self, inorder, postorder):
if not inorder or not postorder:
return None
data = postorder.pop() # 因为postorder弹出一个元素, 所以后面的计算要考虑到
index = inorder.index(data)
root = TreeNode(data)
root.left = self.mytree(inorder[0:index], postorder[0:index])
root.right = self.mytree(inorder[index+1:len(inorder)], postorder[index: len(postorder)])
return root