- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第1页/共20页 遍历二叉树的递归算法算法6.1 前序遍历二叉树的递归算法void preorder(bitree root)/* root为根结点,visit()为访问结点的函数 */{ if ( root !=0) /* 二叉树非空 */ { visit(root->data); /* 访问根结点 */ preorder(root->lchild); /* 遍历左子树(递归调用) */ preorder(root->rchild); /* 遍历右子树(递归调用) */ }}第2页/共20页 中序遍历二叉树的递归算法void Inorder(bitree root)/* root为根结点,visit()为访问结点的函数 */{ if ( root !=0) /* 二叉树非空 */ { Inorder(root->lchild); /* 遍历左子树(递归调用) */ visit(root->data); /* 访问根结点 */ Inorder(root->rchild); /* 遍历右子树(递归调用) */ }}第3页/共20页 后序遍历二叉树的递归算法void PostOrder(bitree root)/* root为根结点,visit()为访问结点的函数 */{ if ( root !=0) /* 二叉树非空 */ { PostOrder(root->lchild); /* 遍历左子树(递归调用) */ PostOrder(root->rchild); /* 遍历右子树(递归调用) */ visit(root->data); /* 访问根结点 */ }}第4页/共20页4. 二叉树的层次遍历二叉树的层次遍历:即按照“从上到下,从左至右”的次序访问所有结点一次且仅一次。对一棵非空的二叉树,先访问根结点,再依次访问左孩子、右孩子,并记录该层结点的访问次序;依次访问各结点的左孩子和右孩子,直到访问到最右端的叶子结点。层次遍历存在容易理解的非递归算法。这里有一个“依序访问下层结点”的问题,为了记录上一层结点的访问次序,需要使用队列。算法描述如下:1)初始化队列Q;2)将根结点入队列;3)当队列Q不空时,重复以下过程:{ 对头元素出队列,并访问该结点; 若该结点左孩子非空,访问左孩子并将左孩子入队; 若结点右孩子非空,访问右孩子并将右孩子入队;}实际上,结点的访问次序就是其进入队列的次序。 第5页/共20页二叉树层次遍历的算法(应用辅助队列)void BTlayer( bitree root){ linkqueue Q;//辅助队列 bitree P=root; /* P指向根结点 */ Init_queue(Q); /* 初始化队列 */ if (root) In_queue(Q,root); /* 根结点入队 */ while ( Q.front) /* 队列Q不空时继续 */ { P=dele_queue(Q); /* 出队,队头元素=>P */ printf(“%c”,P->data); /* 访问结点数据 */ if (P->lchild) In_queue(Q,P->lchild); /* 左孩子入队 */ if (P->rchild) In_queue(Q,P->rchild); /* 右孩子入队 */ }} 第6页/共20页ABCDEFGHKL二、二叉树的建立算法(实验需掌握)按扩展的先序序列建立二叉树的算法要求输入时表示出叶子结点。如图所示:输入序列为:A B D # G L # # # E # # C F H # # K # # #其中的 # 表示空第7页/共20页算法6.4 按扩展先序序列建立二叉树的算法typedef char elemtype ; /* 结点数据为char型 */bitree creatbit()/* 按输入的前序序列建立二叉树,输入以回车表示结束 *//* 若创建成功,返回该二叉树的根,否则返回空指针 */{ char ch; bitree T; scanf(“%c”,&ch); if (ch==’#’) return (0); /* 返回空二叉树 */ else { T=(bitree)malloc(sizeof(bnode)); /* 生成“根”结点 */ T->data=ch; T->lchild=creatbit(); /* 创建左子树 */ T->rchild=creatbit(); /* 创建右子树 */ return (T); /* 返回根
1亿VIP精品文档
相关文档
最近下载
- 2.1 等式的性质与不等式的性质(含答案析)(专题2.1 等式的性质与不等式的性质-高一数学新教材第一册同步学案(人教版)).docx
- PLsql与Tsql的比较完整版.pdf
- 外研社(三年级起点)小学英语三年级上册思维导图电子版.pdf
- 新版阿里钉钉数字化管理师-低代码开发师(初级)考试题库答案整理.docx
- 医院院内聘用制职工同工同酬管理办法.doc
- 人教版七年级上册数学期末考试试卷含答案.docx VIP
- 部编版初中语文教科书李白诗歌整体教学设计.docx VIP
- 新《工伤保险条例》课件(工伤处).pptx
- 知到智慧树网课数字图像处理(西安理工大学)章节测试答案.docx
- 材料范文之新闻宣传工作经验材料.pdf
文档评论(0)