二叉树的定义及基本操作

二叉树的定义及基本操作

一、实验目的、意义

(1)熟悉二叉链表表示的二叉树结构及其递归遍历。

(2)掌握建立二叉链表要领,深入理解递归遍历二叉链表的执行路径。

(3)根据具体问题的需要,能够设计出相关算法。

二、实验内容及要求

说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

具体要求:

(1)定义二叉树的链式存储结构;

(2)建立一颗二叉链表表示的二叉树;

(3)对其进行前序,中序,后序输出。

三、实验所涉及的知识点

C语言算法、循环算法、二叉树结构及其递归遍历、二叉链表的建立,二叉树的前序,中序,后序输出。

四、实验结果及分析

(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)

五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)

(调试过程及调试中遇到的问题及解决办法,其他算法的存在与实践等。)

调试时,由于对所学知识点概念模糊,二叉树结构及其递归遍历不熟悉,试验出现了很大的困难,课上未完成实验,并且还出现一些语法上的错误,经过反复排错、查阅资料,花了大量时间才解决问题。

六、程序清单(包含注释)

#include

#include

typedef char DataType;

typedef struct BitNode

{

DataType data;

struct BitNode *lchild,*rchild;

}*BitTree;

void BinTreeInit(BitTree &BT)//初始化二叉树,即把树根指针置空

{

BT=(BitTree)malloc(sizeof(BitNode));

BT->data=NULL;

cout

}

int BinTreeCreat(BitTree &BT)//按先序次序建立一个二叉树

{

char ch;

cin>>ch;

if(ch=='#') BT=NULL;

else

{

if(!(BT=(BitTree)malloc(sizeof(BitNode))))

exit(0);

BT->data=ch;

BinTreeCreat(BT->lchild);

BinTreeCreat(BT->rchild);

}

return 0;

// 按先序序列建立一个二叉树已经完成!

}

void BinTreeEmpty(BitTree &BT)//检查二叉树是否为空

{

if(BT->data==NULL)

cout

else

cout

}

void BinTraverse1(BitTree &BT)//先序序列遍历二叉树

{

if(BT!=NULL)

{

coutdata;

BinTraverse1(BT->lchild);

BinTraverse1(BT->rchild);

}

}

void BinTraverse2(BitTree &BT)//中序序列遍历二叉树

{

if(BT!=NULL)

{

BinTraverse2(BT->lchild);

coutdata;

BinTraverse2(BT->rchild);

}

}

void BinTraverse3(BitTree &BT)//后序序列遍历二叉树

{

if(BT!=NULL)

{

BinTraverse3(BT->lchild);

BinTraverse3(BT->rchild);

coutdata;

}

}

int BinTreeDepth(BitTree BT)//求二叉树的深度

{

int depthval;

if(BT)

{

int depthLeft=BinTreeDepth(BT->lchild);

int depthRight=BinTreeDepth(BT->rchild);

depthval=1+

(depthLeft>depthRight?depthLeft:depthRight);

}

else depthval=0;

return depthval;

}

int BinTreeCount(BitTree BT)//求二叉树中所有结点数

{

int node;

if(BT)

{

int lchild=BinTreeCount(BT->lchild);

int rchild=BinTreeCount(BT->rchild);

node=lchild+rchild+1;

}

else

node=0;

return node;

}

void main()

{

int i;

BitTree BT;

cout

cout

for(;;)

{

cout

cin>>i;

if(i==1)

BinTreeInit(BT);

else if(i==2)

{

cout

BinTreeCreat(BT);

}

else if(i==3)

BinTreeEmpty(BT);

else if(i==4)

{ BinTraverse1(BT);

cout

BinTraverse2(BT);

cout

BinTraverse3(BT);

cout

}

else if(i==5)

cout

else if(i==6)

cout

else

return ;

}

}

二叉树的定义及基本操作

一、实验目的、意义

(1)熟悉二叉链表表示的二叉树结构及其递归遍历。

(2)掌握建立二叉链表要领,深入理解递归遍历二叉链表的执行路径。

(3)根据具体问题的需要,能够设计出相关算法。

二、实验内容及要求

说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。

具体要求:

(1)定义二叉树的链式存储结构;

(2)建立一颗二叉链表表示的二叉树;

(3)对其进行前序,中序,后序输出。

三、实验所涉及的知识点

C语言算法、循环算法、二叉树结构及其递归遍历、二叉链表的建立,二叉树的前序,中序,后序输出。

四、实验结果及分析

(所输入的数据及相应的运行结果,运行结果要有提示信息,运行结果采用截图方式给出。)

五、总结与体会

(调试程序的心得与体会,若实验课上未完成调试,要认真找出错误并分析原因等。)

(调试过程及调试中遇到的问题及解决办法,其他算法的存在与实践等。)

调试时,由于对所学知识点概念模糊,二叉树结构及其递归遍历不熟悉,试验出现了很大的困难,课上未完成实验,并且还出现一些语法上的错误,经过反复排错、查阅资料,花了大量时间才解决问题。

六、程序清单(包含注释)

#include

#include

typedef char DataType;

typedef struct BitNode

{

DataType data;

struct BitNode *lchild,*rchild;

}*BitTree;

void BinTreeInit(BitTree &BT)//初始化二叉树,即把树根指针置空

{

BT=(BitTree)malloc(sizeof(BitNode));

BT->data=NULL;

cout

}

int BinTreeCreat(BitTree &BT)//按先序次序建立一个二叉树

{

char ch;

cin>>ch;

if(ch=='#') BT=NULL;

else

{

if(!(BT=(BitTree)malloc(sizeof(BitNode))))

exit(0);

BT->data=ch;

BinTreeCreat(BT->lchild);

BinTreeCreat(BT->rchild);

}

return 0;

// 按先序序列建立一个二叉树已经完成!

}

void BinTreeEmpty(BitTree &BT)//检查二叉树是否为空

{

if(BT->data==NULL)

cout

else

cout

}

void BinTraverse1(BitTree &BT)//先序序列遍历二叉树

{

if(BT!=NULL)

{

coutdata;

BinTraverse1(BT->lchild);

BinTraverse1(BT->rchild);

}

}

void BinTraverse2(BitTree &BT)//中序序列遍历二叉树

{

if(BT!=NULL)

{

BinTraverse2(BT->lchild);

coutdata;

BinTraverse2(BT->rchild);

}

}

void BinTraverse3(BitTree &BT)//后序序列遍历二叉树

{

if(BT!=NULL)

{

BinTraverse3(BT->lchild);

BinTraverse3(BT->rchild);

coutdata;

}

}

int BinTreeDepth(BitTree BT)//求二叉树的深度

{

int depthval;

if(BT)

{

int depthLeft=BinTreeDepth(BT->lchild);

int depthRight=BinTreeDepth(BT->rchild);

depthval=1+

(depthLeft>depthRight?depthLeft:depthRight);

}

else depthval=0;

return depthval;

}

int BinTreeCount(BitTree BT)//求二叉树中所有结点数

{

int node;

if(BT)

{

int lchild=BinTreeCount(BT->lchild);

int rchild=BinTreeCount(BT->rchild);

node=lchild+rchild+1;

}

else

node=0;

return node;

}

void main()

{

int i;

BitTree BT;

cout

cout

for(;;)

{

cout

cin>>i;

if(i==1)

BinTreeInit(BT);

else if(i==2)

{

cout

BinTreeCreat(BT);

}

else if(i==3)

BinTreeEmpty(BT);

else if(i==4)

{ BinTraverse1(BT);

cout

BinTraverse2(BT);

cout

BinTraverse3(BT);

cout

}

else if(i==5)

cout

else if(i==6)

cout

else

return ;

}

}


相关文章

  • YL-708-B火灾自动报警及消防联动控制系统
  • 火灾自动报警及消防联动控制系统 实践指导手册 Ver.3.00,2010.05 中国²亚龙科技集团有限公司 浙江亚龙教育装备股份有限公司 目录 一.认识编........................................... ...查看


  • 山东地税税务管理信息系统操作手册-项目管理网上申报纳税人端
  • 山东地税税务管理信息系统 用户操作手册 网上申报 山东省地方税务局 神州数码信息系统有限公司 目录 前言.................................................................... ...查看


  • 也论犯罪的基本特征和本质特征
  • 作者:朱炜 江西公安专科学校学报 2006年03期 犯罪有哪些基本特征?它的本质特征是什么?这是我国刑法学界经常争论的两个问题.特别是关于犯罪的基本特征更是观点众多,至今没有形成一个通说.而社会危害性是犯罪的本质特征这一原来大家公认的观点, ...查看


  • 概念的语义性和操作性定义
  • 概念的语义性和操作性定义 教学内容:概念的语义性和操作性定义 所属章节:第二章 第三节 教学目标:1.掌握概念的操作性语义的定义. 2.掌握概念性语义定义与语义性定义的比较. 3.操作性语义定义的设计方法. 教学重难点:1.掌握概念性语义定 ...查看


  • 软件需求说明书实例
  • 版本变更 摘要 略 关键字 模型.WebService服务.需求说明 目录 1引言 ....................................................... 6 1.1编写目的 ............ ...查看


  • 苏大版,[当代新闻采访写作],徐国源主编
  • 苏州大学编(高纲0891) Ⅰ.课程性质与设置目的要求 当代新闻采访写作是新闻学专业的一门基础课程,主要传授新闻采访写作的理论.理念以及具体的采写方法与技巧. 本课程的学习要求是:通过本课程的学习,考生要积极培养自身的专业素养和道德,熟悉新 ...查看


  • 实用心理学
  • < 实用心理学 >考试大纲 一.总体要求 (一)独立思考,注重理解,把握体系. 实用心理学课程共十章,内容涵盖了心理 学基本知识和应用领域的诸多内容.各章之间既有联系又相对独立.在学习或复习时,必须认真思考,学好课件,掌握课程讲 ...查看


  • 2015年统计从业资格考试大纲
  • 2015年统计从业资格考试大纲 来源:国家统计局发布时间:2015-06-08 14:00 2015年统计从业资格考试大纲 第一篇统计基础知识与统计实务考试大纲 Ⅰ. 考核能力要求 <统计基础知识与统计实务>是<统计从业资 ...查看


  • 火灾报警控制器的使用
  • 火灾报警控制器的使用 (1)修改时间操作步骤 按下"系统设置"键,进入系统设置操作菜单(如图5-20),再按对应的数字键 图5-1 进入系统设置界面需要使用管理员密码(或更高级别密码)解锁后才能进行操作. 按1键进入&q ...查看


  • VB0060中国象棋棋谱管理系统A2
  • 摘要 棋谱管理系统是数据库管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面.对于前者要求建立起数据一致性和完整性强.数据安全性好的库.而对于后者则要求应用程序功能完备,易使用等特点.系统适用于各种象棋爱好者的需求 ...查看


热门内容