二叉树遍历课程设计】

二叉树遍历课程设计】

ID:38645818

大小:70.00 KB

页数:8页

时间:2019-06-17

二叉树遍历课程设计】_第1页
二叉树遍历课程设计】_第2页
二叉树遍历课程设计】_第3页
二叉树遍历课程设计】_第4页
二叉树遍历课程设计】_第5页
资源描述:

《二叉树遍历课程设计】》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、数据结构程序设计报告学院:班级:学号:姓名:实验名称:二叉树的建立与遍历一、实验目的:1.掌握二叉树的二叉链表存储结构;2.掌握二叉树创建方法;3.掌握二叉树的先序、中序、后序的递归实现方法。二、实验内容和要求:创建二叉树,分别对该二叉树进行先序、中序、后序遍历,并输出遍历结果。三、叉树的建立与遍历代码如下:#include#includestructtnode//结点结构体{chardata;structtnode*lchild,*rchild;};typedefstructtnodeTNODE;TNODE*creat(void){

2、TNODE*root,*p;TNODE*queue[50];intfront=0,rear=-1,counter=0;//初始队列中需要的变量front、rear和计数器countercharch;printf("建立二叉树,请输入结点:(#表示虚节点,!表示结束)");ch=getchar();while(ch!='!'){if(ch!='#'){p=(TNODE*)malloc(sizeof(TNODE));p->data=ch;p->lchild=NULL;p->rchild=NULL;rear++;queue[rear]=p;//把非#的元素入队if(rear

3、==0)//如果是第一个元素,则作为根节点{root=p;counter++;}else{if(counter%2==1)//奇数时与其双亲的左子树连接{queue[front]->lchild=p;}if(counter%2==0)//偶数时与其双亲的右子树连接{queue[front]->rchild=p;front++;}counter++;}}else//为#时,计数,但不连接结点{if(counter%2==0)front++;counter++;}ch=getchar();}returnroot;}voidpreorder(TNODE*bt)//先序遍历{if

4、(bt!=NULL){printf("%c",bt->data);preorder(bt->lchild);preorder(bt->rchild);}}voidinorder(TNODE*bt)//中序遍历{if(bt!=NULL){inorder(bt->lchild);printf("%c",bt->data);inorder(bt->rchild);}}voidpostorder(TNODE*bt)//后序遍历{if(bt!=NULL){postorder(bt->lchild);postorder(bt->rchild);printf("%c",bt->data

5、);}}intmain(){TNODE*root;root=creat();printf("递归先序遍历是:");preorder(root);printf("");printf("递归中序遍历是:");inorder(root);printf("");printf("递归后序遍历是:");postorder(root);printf("");return0;}四、程序运行结果:五、程序设计指导:1.创建二叉树的算法:首先对一般的二叉树,添加若干个虚结点使其成为完全二叉树,然后依次输入结点信息,若输入的结点不是虚结点,则建立一个新结点,若是第一个,则令其为根结

6、点,否则将新结点链接至它的双亲结点上。如此重复下去,直至遇到输入结束符(自定)为止。为了使新结点能够与双亲结点正确相连,并考虑到这种方法中先建立的结点其孩子结点也一定先建立的特点,可以设置一个指针类型的数组构成的队列来保存已输入结点的地址,并使队尾(rear)指向当前输入的结点,队头(front)指向这个结点的双亲结点的前一个位置。由于根结点的地址放在队列的第一个单元里,所以当rear为奇数时,则rear所指的结点应作为左孩子与其双亲链接,否则rear所指的结点应作为右孩子与其双亲链接。若双亲结点或孩子结点为虚结点,则无须链接。若一个双亲结点与两个孩子链接完毕,则进行出队

7、操作,使队头指针指向下一个待链接的双亲结点。2.voidpreorder(TNODE*bt)函数:利用递归的思想,不断嵌套循环,读取结点元素,在每个循环中每次先读取,再进行进入下一个递归循环中。3.voidinorder(TNODE*bt)函数:利用递归的思想,不断嵌套循环,读取结点元素,在每个循环中每次先左子树,再读取结点元素,再进行进入下一个递归循环中。4.voidpostorder(TNODE*bt)函数:利用递归的思想,不断嵌套循环,读取结点元素,在每个循环中每次先分别进入左右子树,再进行读取,再进行进入下一个递归循环

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。