C++模板实现的二叉排序树Word格式文档下载.docx
- 文档编号:19663227
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:13
- 大小:263.53KB
C++模板实现的二叉排序树Word格式文档下载.docx
《C++模板实现的二叉排序树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++模板实现的二叉排序树Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
清除
在清除树的所有结点的时候,采取了递归思想,判断左孩子是否为空,如果不空则清空做孩子;
再判断右孩子是否为空,不为空则清空右孩子;
只有当结点左右孩子结点都为空的时候,才释放该结点的空间。
5:
查找
查找要利用二叉排序树的自身优点来进行,每次根据与结点的比较结果选择再继续跟左孩子比较还是跟右孩子比较。
实现代码:
//BSTrees.h
#ifndefDDXX_BSTREES_H
#defineDDXX_BSTREES_H
#include<
iostream>
usingnamespacestd;
template<
typenameType>
classBSTrees
{
public:
BSTrees();
~BSTrees();
structNode
{
Typee;
Node*leftChild;
Node*rightChild;
Node()
{
}
Node(Type_e)
e=_e;
leftChild=NULL;
rightChild=NULL;
};
boolinsert(Typee);
boolerase1(Typee);
boolerase2(Typee);
voidclear();
boolisEmpty();
intgetLength();
Node*find(Typee);
Node*getRoot();
Node*getParent(Node*p);
voidtraverse(Node*ptr);
private:
voidclears(Node*&
p);
Node*m_root;
intm_Length;
};
BSTrees<
Type>
:
BSTrees()
m_root=NULL;
m_Length=0;
}
boolBSTrees<
insert(Typee)
Node*ptr=newNode(e);
if(ptr==NULL)
cout<
"
Allocatememoryfortheelementfailed"
endl;
returnfalse;
}
if(m_root==NULL)
m_root=ptr;
m_Length++;
returntrue;
Node*p=m_root;
Node*pParent=m_root;
while(p!
=NULL)
if(e==p->
e)
cout<
theelementisalreadyexist"
returnfalse;
pParent=p;
if(e>
p->
p=p->
rightChild;
else
leftChild;
if(e<
pParent->
e)
pParent->
leftChild=ptr;
if(e>
rightChild=ptr;
m_Length++;
returntrue;
erase1(Typee)
Node*p=find(e);
if(p==NULL)
There'
snothiselementtodelete"
if(p->
leftChild==NULL)
Node*pParent=getParent(p);
if(pParent->
leftChild==p)
pParent->
leftChild=p->
rightChild=p->
deletep;
p=NULL;
m_Length--;
rightChild==NULL)
leftChild==p)
leftChild!
=NULL&
&
rightChild!
Node*pPre=p->
Node*ptmp=pPre;
while(pPre->
=NULL)
ptmp=pPre;
pPre=pPre->
if(ptmp!
=pPre)
{ptmp->
rightChild=pPre->
pPre->
if(pParent==NULL)
m_root=pPre;
else
if(pParent->
leftChild==p)
pParent->
leftChild=pPre;
else
rightChild=pPre;
erase2(Typee)
if(p->
Node*ptr=p->
while(ptr->
ptr=ptr->
ptr->
m_root=p->
if(pParent->
voidBSTrees<
clear()
if(m_root==NULL)
return;
clears(m_root);
clears(Node*&
p)
if(p->
clears(p->
leftChild);
p->
leftChild=NULL;
rightChild);
rightChild=NULL;
deletep;
p=NULL;
m_Length--;
typenameBSTrees<
Node*BSTrees<
getRoot()
returnm_root;
intBSTrees<
getLength()
returnm_Length;
getParent(Node*p)
if(p==m_root)
returnNULL;
Node*ptr=m_root;
Node*ptf=ptr;
while(ptr!
if(ptr->
e==p->
returnptf;
e>
ptf=ptr;
find(Typee)
while(ptr!
e==e)
returnptr;
e)
traverse(Node*ptr)
if(ptr==NULL)
if(ptr->
traverse(ptr->
cout<
Elementvalue:
ptr->
e<
~BSTrees()
clear();
#endif
//main.cpp
#include"
BSTrees.h"
voidmain()
************************testBSTreeinsert***********************"
int>
Bst;
intArr[9]={6,2,8,4,10,0,12,16,14};
for(inti=0;
i<
9;
i++)
Bst.insert(Arr[i]);
Bst.traverse(Bst.getRoot());
Tree'
slengthis:
Bst.getLength()<
************************testBSTreeerase1***********************"
//Bst.erase1(6);
//Bst.erase1(16);
//Bst.erase1(10);
//Bst.erase1(8);
Bst.erase2(6);
Bst.erase2(16);
Bst.erase2(10);
Bst.erase2(8);
Bst.clear();
测试结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 模板 实现 二叉排序树