首页 > 技术文章 > 数据结构:二叉树遍历及其递归实现

vancasola 2017-11-16 09:12 原文

先序遍历

遍历过程为:

  • ①访问根结点;
  • ②先序遍历其左子树;
  • ③先序遍历其右子树。
  • 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);
}
}

三种遍历

  • 前后中按照访问根节点的先后顺序来确定。
  • 递归实现,前中后序遍历对应输出的前中后三个位置。
  • 先序、中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各结点的时机不同。
  • 图中在从入口到出口的曲线上用三种符号分别标记出了先序、中序和后序访问各结点的时刻。

推荐阅读