重构二叉树
要求:输入前序遍历和中序遍历,重构二叉树,并输出后序遍历。
思路:
1.找出前序遍历中第一个值,即根节点,并记录它在中序遍历中的位置。
2.找出根据根节点,将中序遍历分为左子树中序遍历和右子树中序遍历,并根据1中记录的位置分别得到子树的前序遍历。
3.判断子树的前、中序遍历是否为空。
4.是返回None,否递归调用1,2,3步。
5.返回二叉树。
# 类Tree用于存放二叉树的三个属性
class Tree():
def __init__(self,x):
self.root=x
self.left=None
self.right=None
# 类TreeHandler用于构造和操作二叉树
class TreeHandler():
# 重构二叉树
def reConstructBinaryTree(self,pre,tin):
# 判断前、中序遍历是否为空
if (len(pre) or len(tin))==0:
return None
Tinindex=tin.index(pre[0]) # 根节点在tin中的位置
tree=Tree(pre[0]) # 实例化二叉树对象
# 根据前、中序遍历对左、右子树递归构造
tree.left=self.reConstructBinaryTree(pre[1:Tinindex+1],tin[:Tinindex])
tree.right=self.reConstructBinaryTree(pre[Tinindex+1:],tin[Tinindex+1:])
return tree
# 后序遍历二叉树
def traversalTreeNode(self,tree):
if tree!=None:
self.traversalTreeNode(tree.left)
self.traversalTreeNode(tree.right)
print(tree.root,end=' ')
pre=[1,2,4,5,3,6,7]
tin=[4,2,5,1,6,3,7]
handler=TreeHandler()
tree=handler.reConstructBinaryTree(pre,tin)
handler.traversalTreeNode(tree)
4 5 2 6 7 3 1