实验三 二叉树基本运算以及遍历.docVIP

  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文档。上传文档
查看更多
实验三 二叉树基本运算以及遍历

实验三 二叉树基本运算以及遍历 一 实验目的: 了解树的逻辑和存储特点,掌握二叉树的建立,以及前中后序遍历的理论思想和运算方法。 二 实验内容: 建立一棵二叉树,添加树中结点的元素,对该二叉树进行前、中、后序遍历,并打印遍历结果 三 实验原理: 二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。 二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。 二叉树 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示着元素的逻辑关系。通常有下面两种形式。 二叉链表存储 链表中每个结点由三个域组成,除了数据域外,还有两个指针域,分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。结点的存储的结构为: 结点示意图 其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空。 二叉树的建立: 1 建立根结点。 2 若左子树不空则建左子树。 3 若右子树不空则建右子树。 二叉树的前序遍历 1 访问根结点; 2 先序遍历根结点的左子树; 3 先序遍历根结点的右子树。 二叉树的中序遍历 1 中序遍历根结点的左子树; 2 访问根结点; 3 中序遍历根结点的右子树。 二叉树的后序遍历 1后序遍历根结点的左子树; 2后序遍历根结点的右子树。 3访问根结点; 四 实验步骤 1 进入Turbo C2.0,新建一个文件。 2 输入程序,程序要求使用子函数进行组织。 3 将源程序保存到指定文件夹“D:\学生姓名”。 4 按F9调试,纠正语法错误。 5按Ctrl+F9运行,调试逻辑错误。 6 按Alt+F5查看结果。 五、实验中应注意的问题与思考题: 1 如果需要对树中的数据进行查询修改,应该如何实现? 先找到需要修改的数据的位置,再让对其赋值。 2对各个功能模块采用独立编制子函数,增强程序的可执行性、可移植性和可读性。增加情报信息量,对实际应用中可能发生的情况考虑周全,对非法情形要提出适当的处理方案。 3 深入了解树的逻辑结构,重点掌握递归方法的原理和实现,在确定递归终点条件的时候应特别小心,避免产生死循环。对树的遍历或处理应该采用递归的方法,尽量不使用非递归算法。 六、源代码 #include stdio.h #include stdlib.h struct btnode { int d; struct btnode *lchild; struct btnode *rchild; }; struct btnode *creatbt(bt,k) /*******二叉树的生成********/ struct btnode *bt; int k; { int b; struct btnode *p,*t; printf(请输入b: ); scanf(%d,b); if(b!=0) { p=(struct btnode *)malloc (sizeof(struct btnode)); p-d=b;p-lchild=NULL;p-rchild=NULL; if(k==0) t=p; if(k==1) bt-lchild=p; if(k==2) bt-rchild=p; creatbt(p,1); creatbt(p,2); } return(t); } pretrav(bt) /********二叉树的前序遍历*****/ struct btnode *bt; { if(bt!=NULL) { printf(%d ,bt-d); pretrav(bt-lchild); pretrav(bt-rchild); } return; } intrav(bt) /******二叉树的中序遍历*********/ struct btnode *bt; { if(bt!=NULL) { intrav(bt-lchild); printf(%d ,bt-d); intrav(bt-rchild); } return; } postrav(bt) /*******二叉树的后序遍历*********/ struct btnode *bt; { if(bt!=NULL) { postrav(bt-lchild); postrav(bt-rchild)

文档评论(0)

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

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

1亿VIP精品文档

相关文档