电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

编写递归算法,计算二叉树中叶子结点的数目。VIP免费

编写递归算法,计算二叉树中叶子结点的数目。_第1页
1/3
编写递归算法,计算二叉树中叶子结点的数目。_第2页
2/3
编写递归算法,计算二叉树中叶子结点的数目。_第3页
3/3
学院名称专业班级实验成绩学生姓名学号实验日期课程名称数据结构实验题目2树一、实验目的与要求熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。二、主要仪器设备Cfree三、实验内容和原理[问题描述]编写递归算法,计算二叉树中叶子结点的数目。[输入]一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。对例题中的树,其输入序列ABD..EH...CF.I..G..。[输出]若为空二叉树,则输出:THISISAEMPTYBINARYTREE。若二叉树不空,输出叶子结点的个数。[存储结构]采用二叉链表存储[算法的基本思想]采用递归方法建立和遍历二叉树。首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。遍历二叉树,若某一结点的左右孩子均为NULL,则该结点为叶子结点。[参考源程序]#include#includestructnode{charinfo;structnode*llink,*rlink;};typedefstructnodeNODE;NODE*create(){//构造二叉树charx;NODE*p;scanf("%c",&x);printf("%c",x);//打印出已输入的二叉树if(x!='.'){p=(NODE*)malloc(sizeof(NODE));p->info=x;p->llink=create();p->rlink=create();}elsep=NULL;returnp;}intrun(NODE*t){staticintcount=0;if(t){run(t->llink);//递归遍历左子树,直到叶子处run(t->rlink);//递归遍历右子树,直到叶子处if(t->llink==NULL&&t->rlink==NULL){count++;}}returncount;}main(){NODE*T;intleft_number;printf("请输入一棵树:\n");T=create();printf("\n");if(!T)printf("Thisisaemptybinarytree.");else{left_number=run(T);printf("\n这棵树共有%d个子叶.\n",left_number);}printf("\n");}四、实验结果与分析(2)习题1:注意叶子结点是指该结点既没有左孩子又没有右孩子,采用递归算法就很容易计算出其数目。实验结果如图:五、实验心得及体会本次实验加深了我对树的各种遍历方法。尤其是先序遍历。在建立树的过程中更是采取了递归的方法。有的算法用递归表示要比用循环表示简洁精练[如二叉树的遍历],代码更简洁清晰,可读性更好有的算法递归能实现循环不一定能实现,递归的内部实现要消耗额外的空间和时间。所以说循环的效率更高。

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

编写递归算法,计算二叉树中叶子结点的数目。

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部