二叉搜索树(二叉排序树)
时间:2010-11-29 来源:microsoftmvp
#include<iostream>
using namespace std;
struct node
{
node(node* l,node* r,int X)
{
left=l;
right=r;
element=X;
}
node* left;
node* right;
int element;
};
node* Insert(node* head,int X);
node* Find(node* head,int X);
node* FindMin(node* head);
node* FindMax(node* head);
node* Delete(node* head,int X);
int main()
{
return 0;
}
node* Insert(node* head,int X)
{
if(head==NULL)
{
head=new node(NULL,NULL,X);
}
else if(head->element<X)
{
head->right=Insert(head->right,X);
}
else if(head->element>X)
{
head->left=Insert(head->left,X);
}
return head;
}
node* Find(node* head,int X)
{
if(head==NULL)
return NULL;
if(head->element==X)
return head;
if(head->element<X)
return Find(head->right,X);
else return Find(head->left,X);
}
node* FindMin(node* head)
{
if(head==NULL)
return NULL;
if(head->left==NULL)
return head;
else return FindMin(head->left);
}
node* FindMax(node* head)
{
if(head)
{
while(head->left)
{
head=head->right;
}
}
return head;
}
node* Delete(node* head,int X)
{
if(head==NULL)
return NULL;
if(head->element<X)
head->right=Delete(head->right,X);
if(head->element>X)
head->left=Delete(head->left,X);
else
{
//find the node which is wanted to be delete
if(head->left&&head->right)//has tow children
{
node* temp=FindMin(head->left);
head->element=temp->element;
head->right=Delete(head,head->element);
}
else //one or zero child
{
node *temp=head;
if(head->left==NULL)
{
head=head->right;
delete temp;
}
else// leaf
{
head=head->left;
delete temp;
}
}
}
return head;
}