问题:
/*
* Copyright (c)2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:wangjingqi.cpp
* 作 者:王靖淇
* 完成日期:2016年11月3日
* 版 本 号:v1.0
* 问题描述: 实现二叉树的先序、中序、后序遍历的递归算法,
并对用"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"创建的二叉树进行测试。
☆注:请利用好【二叉树算法库】
* 输入描述: 无
* 程序输出: 测试数据
*/
代码:
☆头文件及功能函数代码详见第10周项目1 ——二叉树算法库
☆主函数main.cpp代码
#include "btree.h"
void PreOrder(BTNode *b) //先序遍历的递归算法
{
if (b!=NULL)
{
printf("%c.",b->data); //访问根节点
PreOrder(b->lchild); //递归访问左子树
PreOrder(b->rchild); //递归访问右子树
}
}
void InOrder(BTNode *b) //中序遍历的递归算法
{
if (b!=NULL)
{
InOrder(b->lchild); //递归访问左子树
printf("%c.",b->data); //访问根节点
InOrder(b->rchild); //递归访问右子树
}
}
void PostOrder(BTNode *b) //后序遍历的递归算法
{
if (b!=NULL)
{
PostOrder(b->lchild); //递归访问左子树
PostOrder(b->rchild); //递归访问右子树
printf("%c.",b->data); //访问根节点
}
}
int main()
{
BTNode *b;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉树b:");
DispBTNode(b);
printf("\n");
printf("先序遍历序列为:\n");
PreOrder(b);
printf("\n");
printf("中序遍历序列为:\n");
InOrder(b);
printf("\n");
printf("后序遍历序列为:\n");
PostOrder(b);
printf("\n");
DestroyBTNode(b);
return 0;
}
运行结果:
知识点总结:
运用了二叉树的先序、中序、后序遍历的方法,根据三种遍历分别的遍历子树与节点的顺序采用递归的方法实现运算。
学习心得:
对于三种遍历问题,要从每种的遍历次序入手,采用递归的方法求解。