对于二叉树T,可以递归定义
它的先序遍历、中序遍历和后序遍历如下:
PreOrder(T
)=T的根节点
+PreOrder(T的左子树)+PreOrder(T的右子树)
InOrder(T)
=InOrder(T的左子树)+T的根节点
+InOrder(T的右子树)
PostOrder(T)
=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根节点
其中,加号表示字符串连接运算。
[问题]
输入一棵二叉树的先序遍历
和中序遍历
序列,输出它的后序遍历
序列。
样例输入:
DBACEGF ABCDEFG
BCAD CBAD
样例输出:
ACBFGED
CDAB
[分析]
先序遍历的第一个字符就是根,因此只需在中序遍历中找到它,就知道左右子树的先序和中序遍历了。例如:
先序:D
BACEGF 中序:ABCD
EFG
由先序遍历的第一个字符D
可知,此二叉树的根节点为D
,并且:
左子树的先序遍历为:BAC 中序遍历为:ABC
右子树的先序遍历为:EGF 中序遍历为:EFG
这样,可以编写一个递归程序
: