实验3二叉树的遍历.docxVIP

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

实验3 二叉树的遍历一、实验目的 了解二叉树的前序和中序序列排列;将C语言同二叉树的数据结构联系起来;掌握生成的二叉树的链表结构;掌握如何按层次输出二叉树的所有结点;掌握如何将动态二叉树转换为静态二叉链表。二、实验步骤与要求1、实验前的准备(1)了解二叉树的基本概念;(2)了解二叉树的基本结构。2、上机操作(3)了解二叉树的前序和中序序列排列;(4)将C语言同二叉树的数据结构联系起来;掌握生成的二叉树的链表结构;掌握如何按层次输出二叉树的所有结点;掌握如何将动态二叉树转换为静态二叉链表。三、实验内容创建一个二叉树,对这棵动态二叉树进行分析,将其用静态二叉链表表示。二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。lchild和rdhild分别用于存储左右孩子的下标。四、实验结果源代码如下:#includestdio.h#includestdlib.h#define MAX 8typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;typedef struct BiTNode_s{char data;int lchild,rchild;}BiTNode_s,*BiTree_s;int i=1;//前序法创建二叉树void CreatBiTree(BiTree T){char ch;if((ch=getchar())==#)T=NULL;else {T=(BiTNode *)malloc(sizeof(BiTNode));T-data=ch;CreatBiTree(T-lchild);CreatBiTree(T-rchild);}}//前序遍历void PreTravel(BiTree T){if(T){printf(%c ,T-data);PreTravel(T-lchild);PreTravel(T-rchild);}}//中序遍历void MidTravel(BiTree T){if(T){MidTravel(T-lchild);printf(%c ,T-data);MidTravel(T-rchild);}}//后序遍历void AftTravel(BiTree T){if(T){AftTravel(T-lchild);AftTravel(T-rchild);printf(%c ,T-data);}}//该函数实现将动态二叉树转化为用静态二叉链表void Tree_to_Array(BiTree T,BiTNode_s a[]){int k;a[i].data=T-data;k=i; //k用于记录递归调用的每一层次的结点对应的数组下标if(T-lchild){i++;a[k].lchild=i; //将左孩子结点对应的下标赋给双亲节点的lchildTree_to_Array(T-lchild,a); //递归调用Tree_to_Array函数}elsea[k].lchild=0; //没有左孩子结点if(T-rchild){i++;a[k].rchild=i; //将右孩子结点对应的下标赋给双亲节点的rchildTree_to_Array(T-rchild,a); ////递归调用Tree_to_Array函数}elsea[k].rchild=0; //没有右孩子结点}void main(){ int j;BiTree T;BiTNode_s a[MAX];printf(请输入二叉树的各节点,没有的用符号#代替:\n);CreatBiTree(T);printf(前序遍历结果为:\n);PreTravel(T);printf(\n);printf(中序遍历结果为:\n);MidTravel(T);printf(\n);printf(后序遍历结果为:\n);AftTravel(T);printf(\n);Tree_to_Array(T,a);printf(转化成的静态二叉链表为:\n);for(j=1;jMAX;j++)printf(%d %c %d %d\n,j,a[j].data,a[j].lchild,a[j].rchild);}// 测试数据// ABC##DE###F#G##运行界面截图如下:五、总结(出现的问题及解决方案或知识点总结)(不少于100字)(1)创建一棵动态二叉树的过程其实类似于对二叉树的遍历,我们可以仿照二叉树的前序遍历,来进行二叉树的创建。利用循环语句读取每个结点的data的内容,如果是结束标记则为空,否则建立结点,再递归建立左

文档评论(0)

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

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

1亿VIP精品文档

相关文档