二叉查找树查找法
///以下是二叉查找树查找法
template class BintreeNode {
public:
T data;
BintreeNode* left; BintreeNode*right;
BintreeNode():left(0),right(NULL){}
BintreeNode(T item):data(item),left(NULL),right(NULL){}
~BintreeNode(){
if(left!=0)
delete left;
if(right!=0)
delete right; }
};
template class Bintree
{
public:
int num;
BintreeNode* root; BintreeNode* Find_bt(T key,int &icmp,int itype=0)//一个二叉树查找算
法,itype=1时有插入功能(不同的值时) {
icmp=0;
if(root==0)
{
icmp++;
if(itype==0)
return NULL;
else
{
num++;
return root=new BintreeNode(key);
}
}
else
{
BintreeNode* ptr=root,*p;
while(ptr!=NULL)
{
icmp++;
p=ptr;
if(ptr->data==key)
return ptr;
else
{
if(ptr->data>key)
ptr=ptr->left;
else
ptr=ptr->right;
}
}
if(itype)
{
num++;
if(p->data>key)
return p->left=new BintreeNode(key);
else
return p->right=new (BintreeNode)(key);
}
return NULL;
}//else
}//Find_bt
Bintree():root(0),num(0){} ~Bintree(){delete root;} };
int compare(const void* a,const void* b)
{
return *(int *)a-*(int *)b; }
template
class Link
{
public:
T data;
Link* next;
Link():next(0){} Link(T item):data(item),next(0){}
~Link(){if(next) delete next;}
};
template
class LinkList
{
public:
Link* first;
LinkList():first(0){} ~LinkList(){if(first)delete first;}
Link* Find_hash(T key,int &icmp,int ntype=0)//查找与插入,当ntype=1
时为插入
{
icmp=0;
if(first==0)
{
icmp++;
if(ntype)
return first=new Link(key);
else
return NULL;
}
else
{
Link*ptr=first,*p;
while(ptr!=NULL)
{
icmp++;
p=ptr;
if(ptr->data==key)
return ptr;