文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>二叉搜索树(二叉排序树)

二叉搜索树(二叉排序树)

时间: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;
}

 

 

 

相关阅读 更多 +
排行榜 更多 +
坦克冒险大师安卓版

坦克冒险大师安卓版

策略塔防 下载
枪战大乱斗2

枪战大乱斗2

飞行射击 下载
猎鸭挑战安卓版

猎鸭挑战安卓版

飞行射击 下载