1、层序:ABCDEFG选作内容采用非递归算法实现二叉树遍历。三、实验前的准备工作1、掌握树的逻辑结构。2、掌握二叉树的逻辑结构和存储结构。3、掌握二叉树的各种遍历算法的实现。一 实验分析本次试验是关于二叉树的常见操作,主要是二叉树的建立和遍历。二叉树的遍历有多种方法,本次试验我采用递归法,递归法比较简单。 二 概要设计功能实现1.int CreatBiTree(BiTree &T) 用递归的方法先序建立二叉树, 并用链表储存该二叉树2.int PreTravel(BiTree &T) 前序遍历3. int MidTravel(BiTree &T) 中序遍历4.int PostTravel(BiT
2、ree &T) 后序遍历5.int Depth(BiTree &T) /计算树的深度6.int howmuch(BiTree T,int h) 采用树节点指针数组,用于存放遍历到的元素地址,如果有左孩子,存入地址,j加一 ,否则没操作,通过访问数组输出层次遍历的结果。k计算叶子数,j为总节点。 H=0printf(%d, j)h=1真,k)h=2for(i=0;idata)参数错误)假7. int exchang(BiTree &T) 交换左右子树,利用递归,当有左右孩子时才交换三 详细设计#includestdlib.htypedef struct BiTNodechar data; str
3、uct BiTNode *lchild,*rchild;BiTNode,*BiTree;int CreatBiTree(BiTree &T)/先序法创建二叉树char ch;if(ch=getchar()= T=NULL;elseT=(BiTNode*)malloc(sizeof(BiTNode);if(!exit(1);T-data=ch;CreatBiTree(T-lchild);rchild);return 0;int PreTravel(BiTree &/前序遍历if(T) printf(,T-data);PreTravel(T-int MidTravel(BiTree &/中序遍历M
4、idTravel(T-int PostTravel(BiTree &/后序遍历PostTravel(T-int howmuch(BiTree T,int h)BiTNode *Q100;/树节点指针数组,用于存放遍历到的元素地址if(T=NULL)空的二叉树n);Q0=T; /存入树根int i,k=0;int j=1; /j为总节点for(i=0;if(Qi-lchild!=NULL) /如果有左孩子,存入地址,j加一 ,否则没操作Qj=Qi-lchild ;j+;rchild!=NULL) /如果有右孩子,存入地址,j加一 ,否则没操作rchild ;lchild=NULL&Qi-rchi
5、ld=NULL)k+; /计算叶子数if(h=0), j);else if(h=1),k);else if(h=2) for(i=0;else int Depth(BiTree & int lh , rh ; if( NULL = T ) return 0 ; else lh = Depth( T-lchild ) ; rh = Depth( T-rchild ) ; return ( lh rh ? lh : rh ) + 1 ; int exchang(BiTree &T)/交换左右子树if(T != NULL) if(T-=NULL&T-=NULL)/当有左右孩子时才交换char t;t
6、=T-lchild-data;T-data=T-rchild-data=t; /交换数据exchang(T-/ 递归调用 int choose(BiTree T) /功能选int a;scanf(,&a);if(a=1)先序遍历:PreTravel(T);else if(a=2)中序遍历:MidTravel(T);else if(a=3)后序遍历:PostTravel(T);else if(a=4)层序遍历:howmuch(T,2);else if(a=5)总节点数:howmuch(T,0);else if(a=6)总叶子数:howmuch(T,1);else if(a=7)树的深度:,Dep
7、th(T);else if(a=8)交换前nexchang(T);交换后nelse if(a=9)exit(1);else printf(没有这个操作n printf( 操作完成,请输入下一个操作nchoose(T);int main() /主函数printf(-二叉树的基本操作-n请先建立二叉树,按先序的方式输入如果数据为空输入空格nBiTree T; /定义二叉树,初始化CreatBiTree(T); choose(T);四 用户手册根据程序的提示按先序输入二叉树,如果数据为空输入空格,然后回车,输入你要进行的操作的序号。1.先序遍历、2中序遍历、3 后序遍历 、4层次遍历、5总节点数、6总叶子数、7树的深度、8交换左右子树、9结束操作五 实验总结通过实验,我熟悉二叉树树的基本操作,掌握二叉树的实现以及实际应用。加深了对二叉树的理解,逐步培养解决实际问题的编程能力以及进一步了解了二叉树。递归的使用,要注意,初始时的状态以及如何使用递归,注意普遍性,思考时从普通的开始。通过这次上机操作,让我明白书本上的程序一定要自己去调试,这样才能将书本程序与老师讲的内容融会贯通,达到温故而知新。六 运行结果ADBCEFG 图(1)图表 1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1