二叉树的建立与先序,中序,后序,层次遍历,图的深度优先搜索和广度优先搜索 实验报告.doc

二叉树的建立与先序,中序,后序,层次遍历,图的深度优先搜索和广度优先搜索 实验报告.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树的建立与先序,中序,后序,层次遍历,图的深度优先搜索和广度优先搜索 实验报告

树和图的遍历实验报告 2011-4-9 实验题目:树和图的遍历 实验目的: 1.实现二叉树的建立与先序,中序,后序,层次遍历 2.选择建立图的类型;根据所选择的类型用邻接矩阵的存储结构构建图;对图进行深度优先搜索和广度优先搜索; 实验内容: 算法描述: (1)二叉树的建立 要建立一棵树就要有根节点和两棵子树。两棵子树的建立同样需要这样的过程。 建立二叉树的过程也是遍历树的过程,实验要求以前序遍历的方式输入数据,因此我们也应按前序遍历的顺序,动态申请存储空间的方式建立这棵树并返回根节点的指针。 BiTNode *CreateBiTree(BiTNode *T){ char ch; if((ch=getchar())== ) T=NULL; else if(ch!=\n){ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(1); T-data=ch; T-lchild=CreateBiTree(T-lchild); T-rchild=CreateBiTree(T-rchild); } return T; } (2)二叉树的遍历 遍历作为二叉树所有操作的基础,因此我把它放在二叉树建立的前面。 前序遍历:即按照根节点,左子树,右子树的顺序访问。 具体操作:遇到节点,立即打印根节点的值,然后访问左子树,再访问右子树。对左子树和右子树的访问也进行相同的操作。 void PreOrderTraverse(BiTree T){ if(T){ putchar(T-data); PreOrderTraverse(T-lchild); PreOrderTraverse(T-rchild); } } 同理,易得中序遍历,后序遍历的操作。 //中序遍历二叉树 void InOrderTraverse(BiTree T){ if(T){ InOrderTraverse(T-lchild); putchar(T-data); InOrderTraverse(T-rchild); } } //后序遍历二叉树 void PostOrderTraverse(BiTree T){ if(T){ PostOrderTraverse(T-lchild); PostOrderTraverse(T-rchild); putchar(T-data); } } 层次遍历: 先访问的节点,其孩子节点也必然优先访问,这就用到了队列的思想。 void LevelTraverse(BiTree T) { BiTree Q[100]; int front,rear; front=rear=0;\\队列置空 BiTree p; if (T){ Q[rear]=T;\\头结点入队 rear=(rear+1)%Maxlength; } while(front!=rear){ p=Q[front];\\头元素出队 front=(front+1)%Maxlength; putchar(p-data);\\打印节点数值 if(p-lchild){ Q[rear]=p-lchild; rear=(rear+1)%Maxlength;\\左孩子入队 } if(p-rchild) { Q[rear]=p-rchild; rear=(rear+1)%Maxlength;\\右孩子入队 } } } (3)图的建立 图的种类分为有向图、有向网、无向图和无向网,虽然都可用邻接矩阵表示,但不同种类的图其数组元素的值是不同的。在图中,顶点相邻接可用“1”表示,不邻接用“”表示;在网中,邻接可用其权值表示。但在具体操作中,“无向图(网)”的弧只需赋值相同值即可,“有向图(网)”的弧不同方向是不同的值,这就要求有向和无向的弧数算法不一样。所以在建立图时,注意到上述要求就可方便的建图。 判断欲建图的类型; 输入欲建图的顶点数和弧数; 输入顶点元素; 构建顶点间的关系:有向图需区分起点、终点;有向网需区分起点、终点和权重,无向图只需输入相邻接的顶点,切忌重复输入;无向网还需输入权重。 (4)关于图的深度优先搜索 深度优先搜索可以从图中的某个顶点V出发,访问此顶点,然后依次从V的未被访问过的邻接点出发深度优先遍历图,直至所有和V有路径相通的顶点都被访问过。void dfs1(MGraph *G,int i){ int j; printf(%5s,G-vexs[i]); visited[i]=1; //标记VI,表示其已被访问 for(j=0;jG-vexnum;j++)

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档