ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:25.03KB ,
资源ID:10696003      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10696003.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++二叉树基本操作实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++二叉树基本操作实验报告.docx

1、C+二叉树基本操作实验报告一、实验目的 选择二叉链式存储结构作为二叉树的存储结构,设计一个程序实现二叉树的基本操作(包括建立、输出、前序遍历、中序遍历、后序遍历、求树高、统计叶子总数等)二、实验开发环境 Windows 8.1 中文版 Microsoft Visual Studio 6.0三、实验内容程序的菜单功能项如下:1-建立一棵二叉树2-前序遍历递归算法3-前序遍历非递归算法4-中序遍历递归算法5-中序遍历非递归算法6-后序遍历递归算法7-后序遍历非递归算法8-求树高9-求叶子总数10-输出二叉树11-退出四、实验分析1、建立一棵二叉树2、输入二叉树各节点数据 cout请按正确顺序输入二

2、叉树的数据:; cin.getline(t,1000); /先把输入的数据输入到一个t数组 3、递归前序遍历 void BL1(ECS_data *t) if(NULL!=t) coutdatal); BL1(t-r); 4、非递归前序遍历 void preOrder2(ECS_data *t) stack s; ECS_data *p=t; while(p!=NULL|!s.empty() while(p!=NULL) coutdatal; if(!s.empty() p=s.top(); s.pop(); p=p-r; 5、递归中序遍历 void BL2(ECS_data *t) if(N

3、ULL!=t) BL2(t-l); coutdatar); 6、非递归中序遍历 void inOrder2(ECS_data *t) /非递归中序遍历 stack s; ECS_data *p=t; while(p!=NULL|!s.empty() while(p!=NULL) s.push(p); p=p-l; if(!s.empty() p=s.top(); coutdatar; 7、递归后序遍历 void BL3(ECS_data *t) if(NULL!=t) BL3(t-l); BL3(t-r); coutdata,; 8、非递归后序遍历 void postOrder3(ECS_da

4、ta *t) stack s; ECS_data *cur; /当前结点 ECS_data *pre=NULL; /前一次访问的结点 s.push(t); while(!s.empty() cur=s.top(); if(cur-l=NULL&cur-r=NULL)| (pre!=NULL&(pre=cur-l|pre=cur-r) coutdatar!=NULL) s.push(cur-r); if(cur-l!=NULL) s.push(cur-l); 9、求树高 int Height (ECS_data *t) if(t=NULL) return 0; else int m = Heig

5、ht ( t-l ); int n = Height(t-r); return (m n) ? (m+1) : (n+1); 10、 求叶子总数int CountLeaf(ECS_data *t) static int LeafNum=0;/叶子初始数目为0,使用静态变量 if(t)/树非空 if(t-l=NULL&t-r=NULL)/为叶子结点 LeafNum+;/叶子数目加1 else/不为叶子结点 CountLeaf(t-l);/递归统计左子树叶子数目 CountLeaf(t-r);/递归统计右子树叶子数目 return LeafNum; 五、运行结果附:完整程序源代码:/二叉树链式存储

6、的实现 #include #include #include using namespace std; struct ECS_data /先定义好一个数据的结构 char data; ECS_data *l; ECS_data *r; ; class ECS private: /int level; /树高 int n; /表示有多少个节点数 int n1; /表示的是数组的总长度值,(包括#),因为后面要进行删除判断 ECS_data *temp1000; public: ECS_data *root; ECS() /初始化 ECS_data *p; char t1000;int i; in

7、t front=0,rear=1; /front表示有多少个节点,rear表示当前插入的点的父母 cout请按正确顺序输入二叉树的数据:; cin.getline(t,1000); /先把输入的数据输入到一个t数组 /coutt endl; int n1=strlen(t); /测量数据的长度 n=0; for(i=0;idata=ti; p-l=NULL; p-r=NULL; front+; tempfront=p; if(1 = front)root=p; else if(p!=NULL)&(0=front%2) temprear-l=p;/刚开始把这里写成了= if(p!=NULL)&(

8、1=front%2) temprear-r=p; if(1=front%2)rear+; /就当前的数据找这个数据的父母 ECS() /释放内存 int i; for(i=1;i=n;i+) if(tempi!=NULL) delete tempi; void JS() /记录节点的个数 int s; s=n; cout该二叉树的节点数为:sendl; void BL1(ECS_data *t)/递归前序遍历 if(NULL!=t) coutdatal); BL1(t-r); void preOrder2(ECS_data *t) /非递归前序遍历 stack s; ECS_data *p=t

9、; while(p!=NULL|!s.empty() while(p!=NULL) coutdatal; if(!s.empty() p=s.top(); s.pop(); p=p-r; void BL2(ECS_data *t)/递归中序遍历 if(NULL!=t) BL2(t-l); coutdatar); void inOrder2(ECS_data *t) /非递归中序遍历 stack s; ECS_data *p=t; while(p!=NULL|!s.empty() while(p!=NULL) s.push(p); p=p-l; if(!s.empty() p=s.top();

10、coutdatar; void BL3(ECS_data *t)/递归后序遍历 if(NULL!=t) BL3(t-l); BL3(t-r); coutdata,; void postOrder3(ECS_data *t) /非递归后序遍历 stack s; ECS_data *cur; /当前结点 ECS_data *pre=NULL; /前一次访问的结点 s.push(t); while(!s.empty() cur=s.top(); if(cur-l=NULL&cur-r=NULL)| (pre!=NULL&(pre=cur-l|pre=cur-r) coutdatar!=NULL) s

11、.push(cur-r); if(cur-l!=NULL) s.push(cur-l); int Height (ECS_data *t) /求树高 if(t=NULL) return 0; else int m = Height ( t-l ); int n = Height(t-r); return (m n) ? (m+1) : (n+1); int CountLeaf(ECS_data *t) /求叶子总数 static int LeafNum=0;/叶子初始数目为0,使用静态变量 if(t)/树非空 if(t-l=NULL&t-r=NULL)/为叶子结点 LeafNum+;/叶子数目

12、加1 else/不为叶子结点 CountLeaf(t-l);/递归统计左子树叶子数目 CountLeaf(t-r);/递归统计右子树叶子数目 return LeafNum; ; int main() ECS a; a.JS(); cout递归前序遍历:; a.BL1(a.root); coutendl; cout非递归前序遍历:; a.preOrder2(a.root); coutendl; cout递归中序遍历:; a.BL2(a.root); coutendl; cout非递归中序遍历:; a.inOrder2(a.root); coutendl; cout递归后序遍历:; a.BL3(a.root); coutendl; cout非递归后序遍历:; a.postOrder3(a.root); coutendl; cout树高为:a.Height(a.root)endl; cout叶子总数为:a.CountLeaf(a.root)endl; return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1