网站大量收购闲置独家精品文档,联系QQ:2885784924

实验三:二叉树操作.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告 学院(系)名称:计算机与通信工程学院 姓名 * * 学号 **** **** 专业 计算机科学与技术 班级 2015级*班 实验项目 实验三:二叉树操作 课程名称 数据结构与算法 课程代码 0661013 实验时间 年 月 日第节 实验地点 7-*** 考核标准 实验过程 25分 程序运行 20分 回答问题 15分 实验报告 30分 特色 功能 5分 考勤违纪情况 5分 成绩 成绩栏 其它批改意见: 教师签字: 考核内容 评价在实验课堂中的表现,包括实验态度、编写程序过程等内容等。 □功能完善, □功能不全 □有小错 □无法运行 ○正确 ○基本正确 ○有提示 ○无法回答 ○完整 ○较完整 ○一般 ○内容极少 ○无报告 ○有 ○无 ○有 ○无 一、实验目的 理解二叉树的逻辑特点和二叉树的性质;掌握二叉树的二叉链表存储结构,掌握二叉树 的创建算法、遍历算法的递归与非递归实现,并能在遍历算法基础上实现较复杂算法设计。 二、实验题目与要求 1.每位同学按下述要求实现相应算法:以二叉链表为存储结构,实现二叉树的创建、遍历算法 1)问题描述:在主程序中提供下列菜单: 1…建立树 2…前序遍历树 3…中序(非递归)遍历树 4…后序遍历树 0…结束 2)实验要求: ① 定义下列过程: CreateTree(): 按从键盘输入的前序序列,创建树 PreOrderTree():前序遍历树(递归) InOrderTree():中序(非递归)遍历树 LaOrderTree(): 后序遍历树(递归) ② 每位同学在实验过程中要单步运行程序,跟踪二叉树的创建过程与前序遍历的递归过程。 3)注意问题: ①注意理解递归算法的执行步骤。 ②注意字符类型数据在输入时的处理。 ③重点理解如何利用栈结构实现非递归算 2. 编写算法交换二叉树中所有结点的左、右子树 1)问题描述:编写一算法,交换二叉树中所有结点的左、右子树 2)实验要求:以二叉链表作为存储结构 3. 试编写按层次顺序遍历二叉树的算法 1)问题描述:编写按层次顺序遍历二叉树的算法 2)实验要求:以二叉链表作为存储结构 4. 编写算法求二叉树高度及宽度。 1) 问题描述:二叉树高度是指树中所有节点的最大层数,二叉树宽度是指在二叉树的各层上, 具有节点数最多的那一层上的节点总数。 2) 实验要求:以二叉链表作为存储结构 三、实验过程与实验结果 应包括如下主要内容: 数据结构定义 二叉树是个节点的有限集合,该集合或者为空,或者由一个根节点及两个分别称为左子树和右子树的互不相交的二叉树组成。当集合为空时,称该二叉树为空二叉树。 算法设计思路简介 1、利用递归算法前序建立二叉树,并完成二叉树的前序、中序和后序遍历。其中前序遍历和后序遍历均用递归算法,中序遍历借助栈的机制,实现非递归遍历。 2、在前序遍历的过程中利用中间变量交换左右子树。 3、利用队列。当上一层中的数据全部出队(遍历)完毕再遍历本层节点。 4、高度:获取所有节点到根节点的最长路径。宽度:在层次遍历的基础上,返回最多节点的层的节点数。 算法描述:可以用自然语言、伪代码或流程图等方式 1、创建树: (1)声明节点 (2)输入当前节点,若输入为#则当前节点为空,否则为当前节点申请空间。 (3)将输入的值赋给当前节点的data域,并前序建立当前节点的左子树和右子树。 (4)返回当前节点。 前序遍历树: (1)若当前节点为空则返回上一级函数,否则打印当前节点。 (2)前序遍历当前节点的左子树。 (3)前序遍历当前节点的右子树。 中序遍历树: (1)声明一个顺序栈,并用p指针指向当前节点。 (2)若当前节点和栈不同时为空则重复进行下一步。否则程序结束 (3)若当前节点不为空则重复进行第四步,否则执行第五步。 (4)在栈不满的情况下将当前节点入栈,并把p指针指向当前节点左子树的根节点。 (5)若栈为空则执行第三步,否则执行第六步。 (6)将栈顶元素出栈,并打印栈顶元素的data,将p指向栈顶元素的右子树的根节点。执行第二步。 前序遍历树: (1)若当前节点为空则返回上一级函数否则执行下一步。 (2)后序遍历当前节点的左子树。 (3)后序遍历当前节点的右子树。 (3)打印当前节点的data。 2、 (1)若当前节点为空则返回NULL,结束。否则执行下一步。 (2)利用中间变量temp交换当前节点的左右子树。 (3)交换当前的点左子树根节点的左右子树。

文档评论(0)

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

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

1亿VIP精品文档

相关文档