前序遍历和中序遍历树构造二叉树
"""
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
if not inorder:
return None
root = TreeNode(preorder[0])
rootpos = inorder.index(preorder[0]) # 使用index(x)获取list中的x的下标
root.left = self.buildTree(preorder[1: rootpos + 1], inorder[: rootpos])
root.right = self.buildTree(preorder[rootpos + 1:], inorder[rootpos + 1:])
return root
def printBinaTree(self, root):
print(root.val, end=" ")
if root.left:
self.printBinaTree(root.left)
if root.right:
self.printBinaTree(root.right)
if __name__ == '__main__':
inorder = [1, 2, 3]
preorder = [2, 1, 3]
sol = Solution()
root = sol.buildTree(preorder, inorder)
sol.printBinaTree(root)
# print(ans)
中序遍历和后序遍历树构造二叉树
"""
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
if not postorder:
return None
root = TreeNode(postorder[-1])
rootpos = inorder.index(postorder[-1])
# print(rootpos, root.val)
root.left = self.buildTree(inorder[:rootpos], postorder[:rootpos])
# print(rootpos, len(postorder), postorder[-1])
root.right = self.buildTree(inorder[rootpos + 1:], postorder[rootpos:-1])
return root
def printBinaTree(self, root):
print(root.val, end=" ")
if root.left:
self.printBinaTree(root.left)
if root.right:
self.printBinaTree(root.right)
if __name__ == '__main__':
inorder = [1, 2, 3]
postorder = [1, 3, 2]
sol = Solution()
root = sol.buildTree(inorder, postorder)
sol.printBinaTree(root)