已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include/#includemystring.h#include/#include/二叉链表结点的类定义using namespace std;templateclass binarytreenode/friend class binarytree;private:T info; binarytreenode * left; binarytreenode * right;public: /binarytreenode() binarytreenode(T ele)info=ele;left=NULL;right=NULL; binarytreenode(T ele,binarytreenode * l,binarytreenode * r)info=ele;left=l;right=r;T value()const; binarytreenode * leftchild()const; binarytreenode * rightchild()const;void setleftchild(binarytreenode *l); void setrightchild(binarytreenode *l);void setvalue(T val);/*templatebinarytreenode:binarytreenode()left=null;right=null;templatebinarytreenode:binarytreenode(T ele)info=ele;left=NULL;right=NULL;templatebinarytreenode:binarytreenode(T ele,binarytreenode * l,binarytreenode * r) info=ele;left=l;right=r;*/templateT binarytreenode:value()constreturn info;templatebinarytreenode * binarytreenode:leftchild()constreturn left;templatebinarytreenode * binarytreenode:rightchild()constreturn right;templatevoid binarytreenode:setleftchild(binarytreenode * l)left=l;templatevoid binarytreenode:setrightchild(binarytreenode * r)right=r;templatevoid binarytreenode:setvalue(T val)info=val;/二叉链表的类定义templateclass binarytreeprivate:binarytreenode * root;public:binarytree()root=NULL;binarytree()deletebinarytree(root);binarytreenode * Root()return root;binarytreenode * parent(binarytreenode * current);binarytreenode * leftsibling(binarytreenode * current);binarytreenode * rightsibling(binarytreenode * current);void creattree(T info);void creattree(T info,binarytree & lefttree,binarytree & righttree);/void creattree(mystring a);void deletebinarytree(binarytreenode * root);void preorder1(binarytreenode * root); /保存当前结点的前序周游void preorder(binarytreenode * root); /保存当前结点右孩子的前序周游void inorder(binarytreenode * root); void postorder(binarytreenode * root);void levelorder(binarytreenode * root);int deep(binarytreenode * current); /求出一个结点的深度 void numofleaf(binarytreenode * root,int & i); /叶子个数/void high(binarytreenode * root,int & i); /高度 void shadow(binarytreenode * root); /镜面影射 void commonp(binarytreenode * p,binarytreenode * q); /求两结点的最近的共同祖先;/找双亲templatebinarytreenode * binarytree:parent(binarytreenode * current)using std:stack;binarytreenode * pointer=root;stackbinarytreenode * astack;if(root=null|current=null)return null;while(!astack.isempty()|pointer)if(pointer)if(pointer.left=current|pointer.right=current)return pointer;astack.push(poiter);pointer=pointer.left;elsepointer=astack.top();astack.pop(); pointer=pointer.right;/找左兄弟templatebinarytreenode * binarytree:leftsibling(binarytreenode * current)binarytreenode * pointer=parent(current);return pointer.left;/找右兄弟templatebinarytreenode * binarytree:rightsibling(binarytreenode * current)binarytreenode * pointer=parent(current);return pointer.right;/生成新树templatevoid binarytree:creattree(const T info)root=new binarytreenode (info);/l=r=NULL;/生成新树templatevoid binarytree:creattree(T info,binarytree & lefttree,binarytree & righttree)root=new binarytreenode (info,lefttree.root,righttree.root);lefttree.root=righttree.root=NULL;/用字符串生成新树/*templatevoid binarytree:creattree(mystring a)using std:stack;stackbinarytreenode * astack;root=new binarytreenode (a0);binarytreenode * pointer=root;int i;for(i=1;ai!=0;i+)if(ai=()astack.push();else if(ai=)astack.top();pointer=rightsibling(pointer); else pointer.left=new binarytreenode (ai);pointer=pointer-leftchild(); */删除树/*templatevoid binarytree:deletebinarytree(binarytreenode * root)if(root!=NULL)deletebinarytree(root-leftchild();deletebinarytree(root-rightchild();delete root;/保存当前结点的前序周游templatevoid binarytree:preorder1(binarytreenode * root)using std:stack;binarytreenode * pointer=root;stackbinarytreenode * astack;while(!astack.empty()|pointer)if(pointer)coutvalue()leftchild();elsepointer=astack.top();astack.pop();pointer=pointer-rightchild();/保存当前结点右孩子的前序周游templatevoid binarytree:preorder(binarytreenode * root)using std:stack;binarytreenode * pointer=root;stackbinarytreenode * astack;astack.push(NULL);while(!astack.empty()|pointer)if(pointer)coutvalue() rightchild()!=NULL)astack.push(pointer-rightchild();pointer=pointer-leftchild();else pointer=astack.top();astack.pop();/中序周游templatevoid binarytree:inorder(binarytreenode * root)using std:stack;binarytreenode * pointer=root;stackbinarytreenode * astack;while(!astack.isempty()|pointer)if(pointer) astack.push(pointer); pointer=pointer.left;elsepointer=astack.top();t;pointer=poiter.right;/后序周游templatevoid binarytree:postorder(binarytreenode * root)using std:stack;enum tagsleft,right;templateclass stackelementpublic:binarytreenode * pointer;tags tag;stackstackelement * astack;stackelement element;binarytreenode * pointer=root;while(!astack.isempty()|pointer) while(pointer)element.pointer=pointer; element.tag=left;astack.push(element);pointer=pointer.leftchild();element=astack.top;pointer=element.pointer;if(element.tag=left)element.tag=right;astack.push(element);pointer=pointer.rightchild();elsecoutpointer.value();pointer=null;/求一个结点的深度templateint binarytree:deep(binarytreenode * current)int i;binarytreenode * pointer=null;while(pointer!=root)pointer=parent(current);i+;current=pointer;return i;/求叶结点个数templatevoid binarytree:numofleaf(binarytreenode * root,int & i)binarytreenode * pointer=root;if(pointer.leftchild()=pointer.rightchild()=null)i+;elsenumofleaf(pointer.leftchild(),i);numofleaf(pointer.rightchild(),i);/*templateint binarytree:high(binarytreenode * root,int & i)binarytreenode * pointer=root;if(pointer.leftchild()=pointer.rightchild()=null)i+;*/将一棵树镜面影射templatevoid binarytree:shadow(binarytreenode * root)binarytreenode * temp=null;binarytreenode * pointer=root;using std:queue;queuebinarytreenode * aqueue;if(pointer)aqueue.push(pointer);while(! aqueue.isempty()pointer=aqueue.front();temp=pointer.left;pointer.left=pointer.right;pointer.right=temp;if(pointer.leftchild()aqueue.push(pointer.leftchild();if(pointer.rightchild()aqueue.push(pointer.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职中药制药技术(中药提取技术)试题及答案
- 中职第二学年(电子商务基础)网络营销实务2026年综合测试题及答案
- 2025年大四(农业建筑环境与能源工程)农村能源利用测试卷
- 2025年大学大一(旅游管理)旅游学概论基础试题及答案
- 2026年数据可视化(三维可视化)考题及答案
- 2025年中职给排水工程技术(给排水施工技术)试题及答案
- 2025年中职第二学年(消防工程技术)火灾报警系统调试测试题及答案
- 2026年抗压能力(情绪管理)综合测试题及答案
- 2025年高职(工艺美术品设计)工艺美术品创作试题及答案
- 2025年高职宠物养护与经营(宠物美容与训导)试题及答案
- 筹建期间会计管理制度
- 百万蛋鸡养殖场项目环境影响报告书
- T-CEPPEA 5002-2019 电力建设项目工程总承包管理规范
- 2025年高考语文复习之文言文阅读(全国)12 选择性必修下教材文言文挖空练习+重要知识点归类(含答案)
- 房屋出租安全免责协议书
- 2024《整治形式主义为基层减负若干规定》全文课件
- 2024年建筑继续教育-建筑八大员(九大员)继续教育笔试历年真题荟萃含答案
- 慢性中耳炎教学查房
- (2023年基价)井巷工程消耗量定额说明
- 放射医学技术职称考试 《相关专业知识》篇 考点汇总
- 地铁资料城市轨道交通设备系统控制中心
评论
0/150
提交评论