- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设二叉树采用链式存储结构,试设计一个算法计算一棵给定二叉树中叶子结点的数目
设二叉树采用链式存储结构,试设计一个算法计算一棵给定二叉树中叶子结点的数目include include define max 10 typedef struct node char data node lchildrchild Bitree Bitree Bmax Bitree Creatree //建立二叉树 Bitree TS char ch int frontrearsign sign0 front0 rear-1 TNULL printf建立二叉树:n chgetchar whilech ifch //输入结点不是虚结点 SBitree mallocsizeofBitree S-datach S-lchildS-rchildNULL rear BrearS ifrearfront TS sign else ifsign21 //寻找父结点 Bfront-lchildS ifsign20 Bfront-rchildS front sign else //输入结点为虚结点 ifsign20 front sign chgetchar return T int SearchleafBitree T //计算叶子数 ifTNULL return 0 else ifT-lchildNULLT-rchildNULL return 1 else returnSearchleafT-lchildSearchleafT-rchild void visitBitree T printfcnT-data void InorderBitree T //中序遍历二叉树 ifTNULL InorderT-lchild visitT InorderT-rchild void main Bitree T TCreatree printf中序遍历:n InorderT printf叶子数dnSearchleafT 题目?设二叉树采用链式存储结构试设计一个算法计算一棵给定二叉树中叶子结点的数目。 问题分析 本程序要求在一棵二叉树中实现计算叶子结点数目的功能为完成上述功能需要解决的关键问题是建立二叉树过程及查找叶子结点过程。 概要设计 建立一个以二叉链表方式存储的二叉树输入结点信息时按照完全二叉树的结点顺序输入。 先序遍历二叉树并判断遍历的根是否是叶子结点若是并记录叶子结点个数。叶子结点判断条件为左孩子域和右孩子域都为空。 详细设计 建立二叉树时按照完全二叉树的结点顺序输入表示虚结点表示输入结束。 若不是虚结点时则建立一个新结点并且将其作为左孩子或右孩子结点连接到它的父结点上第一个结点无父结点若是虚结点则将空结点NULL作为左孩子或右孩子结点连接到它的父节点上。 查找叶子结点利用递归先序遍历二叉树方法来查找叶子结点当遍历一个根结点时判断其左孩子域和右孩子域是否都为空若都为空则该结点是叶子结点并用记录叶子个数否则不是叶子结点。 调试分析及小结 错误及分析当按照完全二叉树的结点顺序输入ABCDE后程序无法运行。经测试发现在建立二叉树时出现问题。 当扫描到B时执行else ifsign21 Bfront-lchildS Sign ifsign20 Bfront-rchildS front sign 注执行上述程序前sign1Bfront指向关键字为A的结点。 当一个if语句段执行完后关键字为A的结点的左孩子为关键字为B的结点sign2。此时本应结束else语句段但由于sign2则第二个if语句条件为真继续执行因此导致程序执行出错。 改正在if语句外置sign改正后代码如下 else ifsign21 Bfront-lchildS ifsign20 Bfront-rchildS front sign
文档评论(0)