后序遍历的递归实现与先序和中序遍历类似,而非递归实现较为复杂,下面会进行详细说明。
如图二叉树,其后序遍历结果为:8 4 5 2 9 10 6 7 3 1
递归实现
void PostOrderTraversal(BinTree BT)
{
if(BT){
PostOrderTraversal(BT->Left);
PostOrderTraversal(BT->Right);
printf("%d ", BT->Date);
}
}
非递归实现
后序遍历的非递归实现较为复杂,这是因为后序遍历需要保证访问一个结点之前先访问其左孩子和右孩子,这为流程控制带来了难题。下面提供两种解决思路:
思路一
当我们判断一个结点能否访问时:1.如果该结点是一个叶子结点(即它的左孩子和右孩子为空),则可以进