树与二叉树转换.pptxVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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); /* 返回根

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

认证主体沃**

1亿VIP精品文档

相关文档

相关课程推荐