二叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以用递归实现(本篇随笔主要分析递归实现),也可使用非递归实现的
前序遍历:根节点->左子树->右子树(根->左->右)
中序遍历:左子树->根节点->右子树(左->根->右)
后序遍历:左子树->右子树->根节点(左->右->根)
在进行已知两种遍历顺序求另一种遍历顺序前,先看一下不同遍历顺序对应的代码
前序遍历
1/* 以递归方式 前序遍历二叉树 */
2 void PreOrderTraverse(BiTree t, int level)
3 {
4 if (t == NULL)
5 {
6 return ;
7 }
8 printf("data = %c level = %d\n ", t->data, level);
9 PreOrderTraverse(t->lchild, level + 1);
10 PreOrderTraverse(t->rchild, level + 1);
11 }
中序遍历
1 /* 以递归方式 中序遍历二叉树 */
2 void PreOrderTraverse(BiTree t, int level)
3 {
4 if (t == NULL)
5 {
6 return ;
7 }
8 PreOrderTraverse(t->lchild, level + 1);
9 printf("data = %c level = %d\n ", t->data, level);
10 PreOrderTraverse(t->rchild, level + 1);
11 }
后序遍历
1 /* 以递归方式 后序遍历二叉树 */
2 void PreOrderTraverse(BiTree t, int level)
3 {
4 if (t == NULL)
5 {
6 return ;
7 }
8 PreOrderTraverse(t->lchild, level + 1);
9 PreOrderTraverse(t->rchild, level + 1);
10 printf("data = %c level = %d\n ", t->data, level);
11 }