思路:
传入前序遍历序列和中序遍历序列,后划分为左子树的前序中序遍历序列和右子树前序中序遍历序列,符合递归的思想,而后序遍历的遍历为:左->右->根,所以先递归左子树序列,后递归右子树序列,再输出根节点
def ToPostOrder(Pre,InOrder):
length = len(Pre)
if length == 0:
return 0
root = Pre[0] //前序遍历的根节点
for i in range(length): //循环找到中序遍历中根节点的位置
if root == InOrder[i]:
break
ToPostOrder(Pre[1:i+1],InOrder[0:i]) //递归,传入左子树的前序遍历序列和左子树的中序遍历序列
ToPostOrder(Pre[i+1:length],InOrder[i+1:length])//递归,传入右子树的前序遍历序列和右子树的中旭遍历序列
print(root,end="") //输出根节点数据,在递归中,为左右子树的根
ToPostOrder("126745","627154")
print("\n")