数据结构与算法实验二叉树基本操作.doc

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

二叉树基本操作实验报告 实验名称 二叉树基本操作 实验目的 熟悉二叉树结点的结构和二叉树的基本操作; 掌握二叉树每种操作的具体实现; 学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法; 在二叉树基本操作的基础上掌握对二叉树的一些其它操作的具体实现方法; 掌握构造哈夫曼树以及哈夫曼编码的方法。 实验内容 编制一个演示二叉树创建、遍历、计算等操作的程序。 问题描述 用数据结构相关知识,实现二叉树的定义和操作。该程序包括二叉树结构类型以及对二叉树操作的具体的函数定义(包括:初始化二叉树、清空二叉树、检查二叉树是否为空、遍历二叉树(先序、后序、中序、层次)、求二叉树的深度、求二叉树所有节点数)。 问题分析 该实验是基于C语言和数据结构知识基础的对二叉树的基本操作的检验,无需设计复杂的算法,程序语句也相对简单。因此,我直接按要求定义了对二叉树操作的具体函数,并于主函数中实现对应的功能调用,其中,功能选择靠switch语句实现。 实验步骤 1.需求分析? ? ?本演示程序用VC++编写,完成二叉树的生成、遍历、计算等基本操作。? 输入的形式和输入值的范围:以字符(其中‘#’表示虚节点)的形式输入,以创建二叉树;在输入二叉树节点前,必须先确定该序列能正确创建二叉树。? ?②?输出的形式:在所有三种操作中都显示操作是否正确以及操作后二叉树的内容。? ③?程序所能达到的功能:完成二叉树的生成、遍历(包括先序、后序、中序、层次四种方式)、计算等基本操作。? ?④?测试数据:创建操作中依次输入a,b,d,#,g,#,#,#,c,e,#,#,f,#,#生成一个二叉树。? 2.概要设计? ??1)为了实现上述程序功能,需要定义二叉树的抽象数据类型:??? ADT?BitTree?{? ?数据对象:由一个根节点和两个互不相交的左右子树构成?? 数据关系:结点具有相同的数据类型及层次结构? 基本操作:? Void BinTreeInit(BitTree *T)? ???初始条件:无? ???操作结果:初始化一棵二叉树?? Void BinTreeCreat(BitTree *T)?? ???初始条件:二叉树T已存在? ???操作结果:按先序次序创建一棵二叉树 2)本程序包含7个函数:??? ①主函数main()?②初始化二叉树函数 BinTreeInit()??③建立一棵二叉树函数BinTreeCreat()??④先序遍历函数PreOrderTraverse()?⑤中序遍历函数 InOrderTraverse()⑥后序遍历函数 PostOrderTraverse()⑦层次遍历函数 LevelOrderTraverse()⑧求二叉树深度函数 Countlevel()⑨检验空树函数BinTreeEmpty()⑩求节点数函数 Countnode() 函数说明 #includestdio.h #includestdlib.h typedef char Datatype; typedef struct NodeType { Datatype data; struct NodeType *lchild; struct NodeType *rchild; }BiTNode; typedef BiTNode * BinTree; //初始化二叉树。即把树指针置空 void BinTreeInit(BiTNode *T) { // BiTNode *T; T=(BiTNode *)malloc(sizeof(BiTNode)); T=NULL; } //二叉树的建立 BinTree CreateBiTNode() { BiTNode *T; Datatype ch; ch=getchar(); if(ch==#) T=NULL; else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf(Error!); T-data=ch; T-lchild=CreateBiTNode(); T-rchild=CreateBiTNode(); } return T; } //先序遍历 void PreOrderTraverse(BiTNode *p){ if(p!=NULL){ printf(%c ,p-data); PreOrderTraverse(p-lchild); PreOrderTraverse(p-rchild); } } //中序遍历 void InOrderTravers

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档