全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7 二叉树的操作【实验简介】二叉树是树形结构的一种重要类型。通过本次实验,熟悉二叉树结点的结构,掌握二叉树的基本操作以及具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。【实验内容】 编写程序,实现对二叉树的以下操作:1 建立二叉树。2 按任一种遍历次序输出二叉树中的所有结点。3 求二叉树的深度。4 求二叉树中的所有节点数。5 求二叉树中的所有叶子节点数。6 清除二叉树,使之编程一只空树。【主要代码】#includeusing namespace std;template struct BinTreeNode/二叉树结点类定义 T data; /数据域 BinTreeNode *leftChild, *rightChild; /左子女、右子女链域 BinTreeNode () /构造函数 leftChild=NULL;rightChild=NULL; BinTreeNode (T x,BinTreeNode *left=NULL,BinTreeNode *right=NULL) data=x; leftChild=left;rightChild=right; ;template class BinaryTree /二叉树类定义public: BinaryTree() root=NULL; /构造函数 BinaryTree (T value) /构造函数 RefValue=value;root=NULL; BinaryTree()destroy(root); /析构函数 bool IsEmpty() return root=NULL; /判二叉树空否 int Height() return Height(root); /求树高度 int Size() return Size(root); /求结点数 BinTreeNode *getRoot() return root; BinTreeNode *LeftChild (BinTreeNode *cur) /返回左子女 return (cur!=NULL)?cur-leftChild:NULL; BinTreeNode *RightChild (BinTreeNode *cur) /返回右子女 return (cur!=NULL)?cur-rightChild:NULL; void Output (BinTreeNode * subtree); /输出结点void BinaryTreeCount(BinTreeNode* BT,int& m1,int& m2); /输出结点数和叶结点数void SetRefValue(T& M)RefValue=M; /设置数据输入停止标志void Setroot(BinTreeNode* N)root=N; /设置根节点void CreateBinTree (BinTreeNode *& subTree);protected: BinTreeNode *root; /二叉树的根指针 T RefValue; /数据输入停止标志 /void CreateBinTree (istream& in, BinTreeNode *& subTree); /从文件读入建树void destroy (BinTreeNode *& subTree);/删除int Height (BinTreeNode *subTree)const; /返回树高度int Size(BinTreeNode *subTree)const; /返回结点数BinTreeNode *Parent (BinTreeNode * subTree, BinTreeNode *cur); /返回父结点friend ostream& operator(ostream& out,BinaryTree& Tree);template void BinaryTree:destroy (BinTreeNode *& subTree) /私有函数: 删除根为subTree的子树 if (subTree!=NULL) destroy (subTree-leftChild); /删除左子树 destroy (subTree-rightChild); /删除右子树 delete subTree; /删除根结点 ;template void BinaryTree:CreateBinTree(BinTreeNode *& subTree) T item; cinitem; /读入根结点的值 if(item!=RefValue) subTree=new BinTreeNode(item); /建立根结点 if (subTree=NULL) cerr 存储分配错! leftChild); /递归建立左子 CreateBinTree (subTree-rightChild);/递归建立右子树 else subTree=NULL; /封闭指向空子树的指针;template int BinaryTree:Height(BinTreeNode *subTree)const /私有函数:利用二叉树后序遍历算法计算二叉树的高度或深度; if (subTree=NULL) return 0; /空树高度为0; else int i=Height(subTree-leftChild); int j=Height(subTree-rightChild); return (ij)?j+1:i+1; ;template void BinaryTree:BinaryTreeCount(BinTreeNode* BT,int& m1,int& m2) /分别统计出二叉树中所有结点数和叶子结点数 if(BT!=NULL) m1+;/统计所有结点 if(BT-leftChild=NULL&BT-rightChild=NULL) m2+; /统计叶子结点数 BinaryTreeCount(BT-leftChild,m1,m2); BinaryTreeCount(BT-rightChild,m1,m2); else return;return; ;template void BinaryTree:Output (BinTreeNode *subtree) /私有函数:利用二叉树后序遍历算法输出二叉树的结点if (subtree!=NULL)coutdataleftChild); /遍历Output(subtree-rightChild);return;void main()BinaryTree a;int m=0,n=0,p=0;BinTreeNode *b;b=a.getRoot();a.SetRefValue(p); /设置结束标志cout请输入要建立的二叉树的整型数,输入0结束,0应比数字多1:;a.CreateBinTree(b); /创建二叉树cout二叉树的所有结点为:;a.Output(b);coutn; /输出所有结点a.Setroot(b);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 11785-2026铺地材料的燃烧性能测定 辐射热源法
- 2026技能考试生活垃圾处理工真题及答案
- 会议服务管理制度试卷及答案
- 特种设备维护保养检查记录表(简易货梯)
- 农村毒蜂蜇伤应急演练脚本
- 2026年烟草知识考试题库及答案
- 起重机械倾覆应急演练脚本
- 2026年冷链仓储配送协议
- CN119959671A 一种基于分布式监控的变电站四遥信号测试系统及方法
- 2026年跨境电商知识产权保护合同协议
- 湖南省湘潭市2026年下学期七年级数学期中考试卷附答案
- 2025浙江湖州市产业投资发展集团下属市飞英融资租赁有限公司招聘笔试历年参考题库附带答案详解
- 2024广州铁路职业技术学院招聘笔试真题参考答案详解
- 2026年物业管理师综合提升试卷附参考答案详解【轻巧夺冠】
- 2026年一级建造师《(矿业工程)管理与实务》考试真题及答案
- 2026安徽合肥工业大学招聘管理人员20名笔试参考题库及答案解析
- 北京市西城区2026年高三一模英语试卷(含答案)
- 《华为OLT产品介绍》课件
- ZPW-2000A型无绝缘移频自动闭塞系统说明书
- 10S505 柔性接口给水管道支墩
- 四年级下册劳动教育全册教学课件
评论
0/150
提交评论