对于二叉树T,可以递归定义它的先序遍历、中序遍历和后序遍历,如下所示:
PreOrder(T)=T的根结点+PreOrder(T的左子树)+PreOrder(T的右子树)
InOrder(T)=InOrder(T的左子树)+T的根结点+InOrder(T的右子树)
PostOrder(T)=PostOrder(T的左子树)+PostOrder(T的右子树)+T的根结点
其中,加号表示字符串连接运算。例如,对于如图6-4所示的二叉树,先序遍历为DBACEGF,中序遍历为ABCDEFG。
这3种遍历都属于递归遍历,或者说深度优先遍历(Depth-First Search,DFS),因为它总是优先往深处访问。
提示6-18:二叉树有3种深度优先遍历:先序遍历、中序遍历和后序遍历。
三个例题:
UVa 548 (Tree)
UVA 839 (Not so Mobile)
UVA 699 (The Falling Leaves)