实现一个功能:
输入:一颗二叉树的先序和中序遍历
输出:后续遍历
思想: 先序遍历中,第一个元素是树根
在中序遍历中找到树根,左边的是左子树 右边的是右子树
1 def fromFMtoL( mid ):
2 global las #全局后序遍历
3 global fir #先序遍历
4
5 root = fir[0] #取出当前树根
6
7 fir = fir[1:] #取出树根后 先序遍历把根拿出来 下面一个元素做树根
8 root_po = mid.find( root ) #在中序遍历当中树根的位置
9 left = mid[0:root_po] #左子树
10 right = mid[root_po+1:len(mid)] #右子树
11
12 '''
13 后序遍历: 左 右 根
14 先左子树 再右子树 最后跟
15 '''
16
17 #有左子树的时候
18 if len(left) > 0:
19 fromFMtoL( left )
20 #有右子树的时候
21 if len(right) > 0:
22 fromFMtoL( right )
23
24 #树根写进结果
25 las += root
26
27
28
29 if __name__ == "__main__" :
30 # fir = input("请输入先序遍历:") #前序遍历的结果
31 # mid = input("请输入中序遍历:") #中序遍历的结果
32 fir = "DBACEGF"
33 mid = "ABCDEFG"
34 # fir = "ABC"
35 # mid = "BAC"
36 las = ""
37 fromFMtoL( mid )
38
39 print(las)