1、DS5树型结构数据结构与算法分析课 程 实 验 报 告 项目名称:树结构的操作学生姓名:学生学号:指导教师:完成日期:2014125【实验目的】1. 理解树形结构的逻辑和存储特点。 2. 掌握二叉树的遍历递归算法。【实验内容】1. 用递归算法实现二叉树的建立,并能输出遍历序列结果(先序、中序、后序任意一种即可) 2. 完成二叉树的应用:统计叶子结点数目,输出叶子结点,求二叉树深度,交换每个结点的左右子树,统计树的结点总个数。(任选其中两个)【实验方式】个人实验。【实验设备与环境】 PC机,Windows XP操作系统,VC+6.0开发环境。【数据结构及函数定义】 (1)主函数main() 实现
2、初始化操作,完成对子函数的调用 (2)子函数BiTree *CreateBiTree(BiTree *T) 创建二叉树 Status DepthBiTree (BiTree *T)求深度Status countleaf(BiTree *T) 计算叶子结点个数 void preorder(BiTree *T)先序遍历void Inorder(BiTree *T) 中序遍历 void Postorder (BiTree *T) 后序遍历void change_left_right(BiTree *T)交换左右孩子【测试数据与实验结果】输入先序序列的数据:ABC#DE#G#F# 【源程序清单】#in
3、clude stdio.h #include stdlib.h #include string.h #define null 0 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; #define STACKINCREMENT 10 typedef int Status; typedef int TElemType; typedef struct BiTNode char data; struct BiT
4、Node *lchild; struct BiTNode *rchild; BiTree; /-创建二叉树 BiTree *CreateBiTree(BiTree *T) char ch; if(ch=getchar()=#) T=NULL; else T=(BiTree *)malloc(sizeof(BiTNode ); T-data=ch; T-lchild = CreateBiTree(T-lchild); T-rchild = CreateBiTree(T-rchild); return T; /-查找结点 /*Status searchBiTree(BiTree *T,TElemT
5、ype x) BiTree *bt; if(T!=NULL) if(bt-data=x) printf(你查找的叶子结点存在于二叉树中); return OK; searchBiTree(T-lchild,x); searchBiTree(T-rchild,x); else printf(%d不在该树种,x); return NULL; */ /-求深度 Status DepthBiTree (BiTree *T) int depthval,depthLeft,depthRight; if ( !T ) depthval = 0; else depthLeft = DepthBiTree( T
6、-lchild ); depthRight= DepthBiTree( T-rchild ); depthval = 1 + (depthLeft depthRight?depthLeft : depthRight); return depthval; /-计算叶子结点个数 Status countleaf(BiTree *T) int num1; int num2; int num; if (T=NULL) num=0; else if(T-lchild=NULL)&(T-rchild=NULL) num=1; else num1=countleaf (T-lchild); num2= co
7、untleaf(T-rchild); num= num1+num2; return num; / 先序遍历二叉树 void preorder(BiTree *T) if(T!=NULL) printf(%2c,T-data); preorder(T-lchild); preorder(T-rchild); / 中序遍历二叉树 void Inorder(BiTree *T) struct BiTNode *p; struct BiTNode *stack20; int top=0; p=T; while(p|top!=0) while (p) stacktop+=p; p=p-lchild ;
8、p=stack-top; printf(%c ,p-data ); p=p-rchild ; / 后序遍历二叉树 void Postorder (BiTree *T) if (T!=NULL) Postorder(T-lchild); Postorder(T-rchild); printf(%2c,T-data); /-交换左右孩子 void change_left_right(BiTree *T) BiTree *temp; if (T) change_left_right(T-lchild); change_left_right(T-rchild); temp=T-lchild; T-lc
9、hild =T-rchild; T-rchild=temp; int main() int i,j; BiTree *bt; printf(请用先序序列输入数据:n); bt= NULL; bt = CreateBiTree(bt); /and here printf(先序遍历的结果:); preorder(bt); printf(nn); printf(中序遍历的结果:); Inorder(bt); printf(nn); printf(后序遍历的结果:); Postorder(bt); printf(nn); printf(叶子结点的总个数:n=); i = countleaf(bt);
10、printf(%d,i); printf(nn); printf(该二叉树的深度: h=); j = DepthBiTree (bt); printf(%d,j); printf(nn); printf(交换左右孩子的结果如下:); change_left_right(bt); printf(先序遍历的结果:); preorder(bt); printf(nn); printf(中序遍历的结果:); Inorder(bt); printf(nn); printf(后序遍历的结果:); Postorder(bt); printf(nn); printf(叶子结点的总个数: n=); i = countleaf(bt); printf(%d,i); printf(nn); printf(该二叉树的深度: h=); j = DepthBiTree (bt); printf(%d,j); printf(nn); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1