数据结构:二叉树遍历及其递归实现
先序遍历
遍历过程为:
- ①访问根结点;
- ②先序遍历其左子树;
- ③先序遍历其右子树。
- A(B D F E )(C G H I)
- 先序遍历=> A B D F E C G H I
void PreOrderTraversal( BinTree BT )
{
if( BT ) {
printf(“%d”, BT->Data);
PreOrderTraversal( BT->Left );
PreOrderTraversal( BT->Right );
}
}
中序遍历
- ①中序遍历其左子树;
- ②访问根结点;
- ③中序遍历其右子树。
- (D B E F) A (G H C I)
- 中序遍历=> D B E F A G H C I
void InOrderTraversal( BinTree BT )
{
if( BT ) {
InOrderTraversal( BT->Left );
printf(“%d”, BT->Data);
InOrderTraversal( BT->Right );
}
}
后序遍历
- ①后序遍历其左子树;
- ②后序遍历其右子树;
- ③访问根结点。
- (D E F B )( H G I C) A
- 后序遍历=> D E F B H G I C A
void PostOrderTraversal( BinTree BT )
{
if( BT ) {
PostOrderTraversal( BT->Left );
PostOrderTraversal( BT->Right);
printf(“%d”, BT->Data);
}
}
三种遍历
- 前后中按照访问根节点的先后顺序来确定。
- 递归实现,前中后序遍历对应输出的前中后三个位置。
- 先序、中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各结点的时机不同。
- 图中在从入口到出口的曲线上用三种符号分别标记出了先序、中序和后序访问各结点的时刻。