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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构二叉树基本操作源代码.docx

1、数据结构二叉树基本操作源代码数据结构二叉树基本操作(1)./ 对二叉树的基本操作的类模板封装/-#includeusing namespace std;/-/定义二叉树的结点类型BTNode,其中包含数据域、左孩子,右孩子结点。template struct BTNode T data ; /数据域 BTNode* lchild; /指向左子树的指针 BTNode* rchild; /指向右子树的指针;/-/CBinary的类模板template class BinaryTree BTNode* BT; public: BinaryTree()BT=NULL; / 构造函数,将根结点置空 Bi

2、naryTree()clear(BT); / 调用Clear()函数将二叉树销毁 void ClearBiTree()clear(BT);BT=NULL; / 销毁一棵二叉树 void CreateBiTree(T end); / 创建一棵二叉树,end为空指针域标志 bool IsEmpty(); / 判断二叉树是否为空 int BiTreeDepth(); / 计算二叉树的深度 bool RootValue(T &e); / 若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false BTNode*GetRoot(); / 二叉树不为空获取根结点指针,否则返回NULL bo

3、ol Assign(T e,T value); / 找到二叉树中值为e的结点,并将其值修改为value。 T GetParent(T e); / 若二叉树不空且e是二叉树中的一个结点那么返回其双亲结点值 T GetLeftChild(T e); / 获取左孩子结点值 T GetRightChild(T e); / 获取右孩子结点值 T GetLeftSibling(T e); / 获取左兄弟的结点值 T rightsibling(BTNode*p,T e); T GetRightSibling(T e); / 获取右孩子的结点值 bool InsertChild(BTNode* p,BTNod

4、e* c,int RL);/ 插入操作 bool DeleteChild(BTNode* p,int RL); /删除操作 void PreTraBiTree(); / 递归算法:先序遍历二叉树 void InTraBiTree(); / 递归算法:中序遍历二叉树 void PostTraBiTree(); / 递归算法:后序遍历二叉树 void PreTraBiTree_N(); / 非递归算法:先序遍历二叉树 void InTraBiTree_N(); / 非递归算法:中序遍历二叉树 void LevelTraBiTree(); / 利用队列层次遍历二叉树 int LeafCount();

5、 / 计算叶子结点的个数 BTNode* SearchNode(T e); / 寻找到结点值为e的结点,返回指向结点的指针 void DisplayBTreeShape(BTNode*bt,int level=1);/二叉树的树形显示算法template void BinaryTree:DisplayBTreeShape(BTNode*bt,int level) if(bt)/空二叉树不显示 DisplayBTreeShape(bt-rchild,level+1);/显示右子树 coutendl; /显示新行 for(int i=0;ilevel-1;i+) cout ; /确保在第level

6、列显示节点 coutdata; /显示节点 DisplayBTreeShape(bt-lchild,level+1);/显示左子树 /if/DisplayBTreetemplate static int clear(BTNode*bt) /销毁一棵二叉树 if(bt)/根结点不空 clear(bt-lchild); /递归调用Clear()函数销毁左子树 clear(bt-rchild); /递归调用Clear()函数销毁右子树 cout释放了指针bt所指向的空间。endl; delete bt; /释放当前访问的根结点 return 0;template void BinaryTree:Cr

7、eateBiTree(T end) /创建一棵二叉树:先序序列的顺序输入数据,end为结束的标志 cout请按先序序列的顺序输入二叉树,-1为空指针域标志:endl; BTNode*p; T x; cinx; /输入根结点的数据 if(x=end) return ; /end 表示指针为空,说明树为空 p=new BTNode; /申请内存 if(!p) cout申请内存失败!data=x; p-lchild=NULL; p-rchild=NULL; BT=p; /根结点 create(p,1,end);/创建根结点左子树,1为标志,表示左子树 create(p,2,end);/创建根结点右子

8、树,2为标志,表示右子树template static int create(BTNode*p,int k,T end)/静态函数,创建二叉树,k为创建左子树还是右子树的标志,end为空指针域的标志 BTNode*q; T x; cinx; if(x!=end) /先序顺序输入数据 q=new BTNode; q-data=x; q-lchild=NULL; q-rchild=NULL; if(k=1) p-lchild=q; /q为左子树 if(k=2) p-rchild=q; /p为右子树 create(q,1,end); /递归创建左子树 create(q,2,end); /递归创建右子

9、树 return 0;template bool BinaryTree:IsEmpty()/判断二叉树是否为空 if(BT=NULL) return true;/树根结点为空,说明树为空 return false;template int BinaryTree:BiTreeDepth()/利用递归算法计算树的深度 BTNode*bt=BT;/树根结点 int depth=0;/开始的时候数的深度初始化为0 if(bt)/如果树不为空 Depth(bt,1,depth); return depth;template static int Depth(BTNode* p,int level,int

10、 &depth) /这个函数由BiTreeDepth()函数调用完成树的深度的计算 /其中p是根结点,Level 是层,depth用来返回树的深度 if(leveldepth) depth=level; if(p-lchild) Depth(p-lchild,level+1,depth);/递归的遍历左子树,并且层数加1 if(p-rchild) Depth(p-rchild,level+1,depth);/递归的遍历右子树,并且层数加1 return 0;template bool BinaryTree:RootValue(T &e)/若二叉树不为空用e返回根结点的值,函数返回true,否则

11、函数返回false if(BT!=NULL) /判断二叉树是否为空 e=BT-data; /若不空,则将根结点的数据赋值给e return true;/操作成功,返回true return false; /二叉树为空,返回falsetemplate BTNode*BinaryTree:GetRoot()/获取根信息 return BT;/返回根结点的指针,若二叉树为空那么返回NULLtemplate bool BinaryTree:Assign(T e,T value)/结点赋值 if(SearchNode(e)!=NULL) (SearchNode(e)-data=value; return

12、 true; return false;template T BinaryTree:GetParent(T e)/获取双亲信息 BTNode*Queue200,*p; int rear,front; rear=front=0; if(BT) Queuerear+=BT; while(rear!=front) p=Queuefront+; if(p-lchild&p-lchild-data=e|p-rchild&p-rchild-data=e) return p-data; else if(p-lchild) Queuerear+=p-lchild; if(p-rchild) Queuerear

13、+=p-rchild; return NULL;template T BinaryTree:GetRightChild(T e)/如果二叉树存在,e是二叉树中的一个结点,右子树存在那么返回右子树的结点值,否则返回0并提示右子树为空 BTNode*p=SearchNode(e); if(p-rchild) return p-rchild-data;/右子树不空,返回右子树根结点的值 cout结点e的右子树为空endl; return 0;template T BinaryTree:GetLeftChild(T e)/如果二叉树存在,e是二叉树中的一个结点,左子树存在那么返回左子树的结点值,否则返

14、回0并提示左子树为空 BTNode*p=SearchNode(e); if(p-lchild) return p-lchild-data; cout结点e的左子树为空endl; return 0;template T BinaryTree:GetLeftSibling(T e)/获取左兄弟信息 if(BT!=NULL) return leftsibling(BT,e); else /二叉树为空 cout二叉树为空!endl; return 0; template T leftsibling(BTNode*p,T e) T q=0; if(p=NULL) return 0; else if(p-

15、rchild) if(p-rchild-data=e) if(p-lchild) return p-lchild-data; else return NULL; q=leftsibling(p-lchild,e); if(q)return q; q=leftsibling(p-rchild,e); if(q)return q; return 0;/-template T BinaryTree:GetRightSibling(T e)/获取右兄弟信息 if(BT!=NULL) return rightsibling(BT,e); else /二叉树为空 cout二叉树为空!endl; retur

16、n 0; template T BinaryTree:rightsibling(BTNode*p,T e) BTNode *q=SearchNode(e); BTNode *pp; if(q) pp=SearchNode(GetParent(e); if(pp) if(pp-rchild) return pp-rchild-data; else return 0; else return 0; return 0;template bool BinaryTree:InsertChild(BTNode* p,BTNode* c,int LR)/插入孩子 if(p) if(LR=0) c-rchil

17、d=p-lchild; p-lchild=c; else c-rchild=p-rchild; p-rchild=c; return true; return false;/p为空/-template bool BinaryTree:DeleteChild(BTNode* p,int RL) /删除结点 if(p) if(RL=0) clear(p-lchild);/释放p右子树的所有结点空间 p-lchild=NULL; else clear(p-rchild); p-rchild=NULL; return true;/删除成功 return false;/p为空/-template voi

18、d BinaryTree:PreTraBiTree()/先序遍历二叉树 cout-endl; cout先序遍历二叉树:; BTNode*p; p=BT; /根结点 PreTraverse(p); /从根结点开始先序遍历二叉树 coutendl; cout-endl;template static int PreTraverse(BTNode*p) if(p!=NULL) coutdatalchild); /递归的调用前序遍历左子树 PreTraverse(p-rchild); /递归的调用前序遍历右子树 return 0; /-template void BinaryTree:InTraBiT

19、ree()/中序遍历二叉树 cout-endl; cout中序遍历二叉树:; BTNode*p; p=BT;/根结点 InTraverse(p);/从根结点开始中序遍历二叉树 coutendl; cout-endl;template static int InTraverse(BTNode*p) if(p!=NULL) InTraverse(p-lchild); /递归的调用中序遍历左子树 coutdatarchild); /递归的调用中序遍历右子树 return 0;/-template void BinaryTree:PostTraBiTree()/后序遍历二叉树 cout-endl; c

20、out后序遍历二叉树:; BTNode*p; p=BT;/根结点 PostTraverse(p);/从根结点开始遍历二叉树 coutendl; cout-endl;template static int PostTraverse(BTNode*p) if(p!=NULL) PostTraverse(p-lchild);/递归调用后序遍历左子树 PostTraverse(p-rchild);/递归调用后序遍历右子树 coutdata ; /输出结点上的数据 return 0;/-template void BinaryTree:PreTraBiTree_N()/ cout-endl; cout先序(非递归)遍历二叉树得:; BTNode *Stack200;/利用指针数组作为栈 int top=0; BTNode*p=BT;/将根结点的指针赋值给p while(p!=NULL|top!=0) while(p!=NULL) coutdatarchild; p=p-lchild; if(top!=0) p=Stack-top; coutn-endl;/-template void BinaryTree:InTraBiTree_N(

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

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