int count£»
struct node * llink£¬*rlink£» }BiTNode£¬*BSTree£»
void Search_InsertX(BSTree t£¬datatype X£© //ÔÚ¶þ²æÅÅÐòÊ÷tÖвéÕÒֵΪXµÄ½áµã£¬Èô²éµ½£¬ÔòÆä½áµãµÄcountÓòÖµÔö1£¬·ñÔò£¬
//½«Æä²åÈëµ½¶þ²æÅÅÐòÊ÷ÖС£
{p=t£»
while£¨p!=null && p->data!=X£© //²éÕÒֵΪXµÄ½áµã£¬fÖ¸Ïòµ±Ç°½áµãµÄË«Ç× {f=p£»
if£¨p->data
{p=£¨BiTNode *£©malloc(sizeof £¨BiTNode£©£©£» p->data=X£»p->llink=null£»p->rlink=null£»
if£¨f->data>X£©f->llink=p£»else f->rlink=p£» }
else p->count++£»// ²éѯ³É¹¦£¬ÖµÓòΪXµÄ½áµãµÄcountÔö1¡£ }// Search_InsertX
17£®[ÌâÄ¿·ÖÎö] ÒòΪ¶þ²æÊ÷¸÷½áµãÒѱêÃ÷ÁËÆ½ºâÒò×Ób£¬¹Ê´Ó¸ù½áµã¿ªÊ¼¼ÇÊ÷µÄ²ã´Î¡£¸ù½áµãµÄ²ã´ÎΪ1£¬Ã¿ÏÂÒ»²ã£¬²ã´Î¼Ó1£¬Ö±µ½²ãÊý×î´óµÄÒ¶×Ó½áµã£¬Õâ¾ÍÊÇÆ½ºâ¶þ²æÊ÷µÄ¸ß¶È¡£µ±½áµãµÄƽºâÒò×ÓbΪ0ʱ£¬ÈÎÑ¡×óÓÒÒ»·ÖÖ¦ÏòϲéÕÒ£¬Èôb²»Îª0£¬ÔòÑØ×󣨵±b=1ʱ£©»òÓÒ£¨µ±b=-1ʱ£©ÏòϲéÕÒ¡£ int Height£¨BSTree t£© // ÇóÆ½ºâ¶þ²æÊ÷tµÄ¸ß¶È {level=0£»p=t£» while£¨p£©
{level++£» // Ê÷µÄ¸ß¶ÈÔö1
if£¨p->bf<0£©p=p->rchild£»//bf=-1 ÑØÓÒ·ÖÖ¦ÏòÏÂ
//bfÊÇÆ½ºâÒò×Ó£¬ÊǶþ²æÊ÷t½áµãµÄÒ»¸öÓò£¬Òòƪ·ùËùÏÞ£¬Ã»ÓÐд³öÆä´æ
´¢¶¨Òå
else p=p->lchild£» //bf>=0 ÑØ×ó·ÖÖ¦ÏòÏÂ
}//while
return £¨level£©£»//ƽºâ¶þ²æÊ÷µÄ¸ß¶È
} //Ëã·¨½áÊø
18£®[ÌâÄ¿·ÖÎö]¶þ²æÅÅÐòÊ÷µÄ½¨Á¢ÎÊÌâÇë²Î¼ûÉÏÃæÌâ3£¨1£©¡£½«¶þ²æÅÅÐòÊ÷Éϵĸ÷ÕûÊý°´½µÐòдÈë´ÅÅ̵ÄÎÊÌ⣬Ҫ¶Ô¶þ²æÅÅÐòÊ÷½øÐС°ÖÐÐò±éÀú¡±¡£ÕâÀïµÄ¡°ÖÐÐò±éÀú¡±Òª²ÉÈ¡¡°ÓÒ¸ù×󡱡£Îª·½±ãÆð¼û£¬ÏȽ«ÕûÊýдÈëһȫ¾Ö±äÁ¿Êý×éÖУ¬ÔÙдÈë´ÅÅÌÎļþÖС£
int i=0,a[n];//³¤¶ÈΪnµÄÕûÐÍÊý×é void InOrder(BSTree t)
//ÏÈÓÒºó×óµÄÖÐÐò±éÀú¶þ²æÅÅÐòÊ÷t£¬¼Ù¶¨¸ÃÊ÷tÒÑÔÚ±¾Ì⣨1£©ÖÐÉú³É {if (t)
{ InOrder(t->rchild) a[i++]=t->key; InOrder(t->lchild) }
}//InOrder
void SaveToDisk()
//½«¶þ²æÅÅÐòÊ÷Éϵĸ÷ÕûÊý°´½µÐòдÈë´ÅÅÌ {FILE *fp;
if ((fp=fopen(¡°file1.dat¡±, ¡°wb¡±))==null) {printf(¡°file can not open!\\n¡±);exit(0); }
fwrite(a,sizeof (int),n,fp);//½«Êý×éaÖеÄn¸öÕûÊýдÈë´ÅÅÌ fclose(fp);//¹Ø±ÕÎļþ }//SaveToDisk
19£®±¾ÌâµÄ·ÖÎöͬµÚ18Ìâ¡£ÕâÀïÖ±½Óд³öËã·¨ £¨1£©µÝ¹éËã·¨
void DecPrint(BSTree t£©
//µÝ¼õÐòÊä³ö¶þ²æÅÅÐòÊ÷tÖÐËùÓÐ×ó×ÓÊ÷Ϊ¿ÕÓÒ×ÓÊ÷·Ç¿ÕµÄ½áµãÊý¾ÝÓòµÄÖµ¡£ {if£¨t£©
{DecPrint(t->rchild)£»
if£¨!t->lchild && t->rchild£©printf(t->data£º4£© DecPrint(t->lchild£©£» }
}//DecPrint £¨2£©·ÇµÝ¹éËã·¨
void DecPrint(BSTree t£©
// µÝ¼õÐòÊä³ö¶þ²æÅÅÐòÊ÷tÖÐËùÓÐ×ó×ÓŮΪ¿ÕÓÒ×ÓÅ®·Ç¿ÕµÄ½áµãµÄÖµ {BSTree S[]£»//SÊǶþ²æÅÅÐòÊ÷½áµãÖ¸ÕëµÄÕ»£¬ÈÝÁ¿×ã¹»´ó int top=0£»
while£¨t || top>0£© {while£¨t£©
{S[++top]=t£»t=t->rchild £»} //ÑØÓÒ·ÖÖ¦ÏòÏ if£¨top>0£© {t=S[top--]£»
if£¨!t->lchild && t->rchild£©printf(t->data£º4)£» t=t->lchild£» // È¥×ó·ÖÖ¦
}//if
}//while }//Ëã·¨½áÊø
20£®[ÌâÄ¿·ÖÎö]ÕâÊÇÒ»¸öÔÚµ¥Á´±íÖвéÕÒ½áµã£¬ÔÚ½áµãÄÚ²éÕÒ¸ø¶¨ÖµµÄ¹ý³Ì£¬Ïȶ¨Òå´æ´¢½á¹¹£º
typedef struct node
{int A[m]£» //ÿ¸ö½áµãÄÚº¬ÓÐm¸öÕýÕûÊý£¬±¾ÀýÖÐmΪ5 struct node *next£»//Ö¸ÏòÏÂÒ»½áµãµÄÖ¸Õë }LNode£¬*LinkList£» typedef struct
{int j£»// ÕýÕûÊýÔÚ½áµãÄÚµÄÐòºÅ struct node *s£»// ½áµãµÄÖ¸Õë }rcd;
rcd *LSearch(LinkList head,int n)
//ÔÚÁ´±íÖвéÕÒÕýÕûÊýn£¬Èô²éÕҳɹ¦£¬·µ»Ø¸Ã½áµãÖ¸Õë¼°nÔÚ½áµãÖеÄÐòºÅ£» //·ñÔò·µ»Ø¿ÕÖ¸Õë±íʾʧ°Ü¡£ {rcd *R;
P=head->next£»// ¼Ù¶¨Á´±í´øÍ·½áµã£¬PÖ¸ÏòÁ´±íµÚÒ»ÔªËØ½áµã found=0£»
while£¨P && !found£© {for(i=0;i if(P->A[i]==n) found=1 //²éÕҳɹ¦ P=P->next; //ÏÂÒ»½áµã } if£¨P==null£©return £¨null£©£» else {R.j=i; R.s=P; return £¨R£©£»} }//LSearch 21£®int Search£¨rectype R[]£¬int n,K£© // ÔÚ¾ßÓÐn¸öÔªËØµÄÓÐÐò±íRÖУ¬Ë³Ðò²éÕÒֵΪKµÄ½áµã£¬²éÕҳɹ¦·µ»ØÆäλÖ㬠//·ñÔò·µ»Ø-1±íʾʧ°Ü {i=0£» while£¨i {if£¨R[i]==K£© return £¨i£©£» else if£¨R[i]>K£© return £¨-1£©£» i++; }//while return £¨-1£©£» }//½áÊøsearch ÔڵȸÅÂÊÇé¿öÏ£¬Ôò²éÕҳɹ¦µÄƽ¾ù²éÕÒ³¤¶ÈΪ£¨n+1£©/2£¬²éÕÒʧ°ÜµÄƽ¾ù²éÕÒ³¤¶ÈΪ£¨n+2£©/2£¨Ê§°ÜλÖóýСÓÚÿһ¸ö£¬»¹´æÔÚ´óÓÚ×îºóÒ»¸ö£©¡£Èô²éÕҳɹ¦ºÍ²»³É¹¦µÄ¸ÅÂÊÒ²ÏàµÈ£¬Ôò²éÕҳɹ¦Ê±ºÍ¹Ø¼ü×ֱȽϵĸöÊýµÄÆÚÍûֵԼΪ(n+1)/4¡£ 22£®[ÌâÄ¿·ÖÎö]±¾Ìâ²ÉÓÃÖÐÐò±éÀú£¬½«±éÀú½áµãÓëǰÇý±È½Ï£¬ÈôÏàͬ£¬Ôò²»Êä³ö²¢¼ÇÊý¡£ void BSTPrint(BSTree t,int *count£© //µÝÔöÐòÊä³ö¶þ²æÅÅÐòÊ÷ÖнáµãµÄÖµ£¬ÂËÈ¥ÖØ¸´ÔªËØ {if£¨t£© {BSTPrint(t->lchild)£» //ÖÐÐò±éÀú×ó×ÓÊ÷ if£¨pre==null£©pre=t; //preÊǵ±Ç°·ÃÎʽáµãµÄǰÇý,µ÷Óñ¾Ë㷨ʱ³õֵΪnull else if(pre->key==t->key)*count++;//*count¼ÇÖØ¸´ÔªËØ£¬µ÷Óñ¾Ë㷨ʱ³õֵΪ0 else {printf£¨¡°M¡±,t->key£©£»pre=t£»} // ǰÇýºóÒÆ BSTPrint(t->rchild)£» //ÖÐÐò±éÀúÓÒ×ÓÊ÷ }//if }//½áÊøBSTPrint Ëã·¨ 23£®[ÌâÄ¿·ÖÎö]±¾ÌâËã·¨Ö®Ò»ÊÇÈçÉÏÌâÒ»Ñù£¬ÖÐÐò±éÀú¶þ²æÊ÷£¬ÔÚ¡°·ÃÎʸù½áµã¡±´¦ÅжϽáµãÖµÊÇ·ñ¡Ýx£¬ÈçÊÇÔòÊä³ö£¬²¢¼ÇסµÚÒ»¸ö¡ÝxÖµ½áµãµÄÖ¸Õë¡£ÕâÀï¸ø³öÁíÒ»¸öËã·¨£¬ÀûÓöþ²æÅÅÐòÊ÷µÄÐÔÖÊ£¬Èç¹û¸ù½áµãµÄÖµ>=x,Ôò³ý×ó·ÖÖ¦ÖпÉÄÜÓÐ ´Ó¸ù½áµã¿ªÊ¼²éÕÒ£¬ÕÒµ½½áµãÖµ // ÖÐÐòÊä³öÒÔtΪ¸ùµÄ¶þ²æÅÅÐòÊ÷µÄ½áµã {if£¨t£©{Print£¨t->lchild£©£» printf£¨t->data£º4£©£» Print£¨t->rchild£©£» } } void PrintAllx(BSTree bst£¬datatype x£© //ÔÚ¶þ²æÅÅÐòÊ÷bstÖУ¬²éÕÒÖµ¡ÝxµÄ½áµã²¢Êä³ö {p=bst£» if£¨p£© {while£¨p && p->data {f=p; p=p->lchild £»//ÕÒµÚÒ»¸öÖµ while£¨p && p->data¡Ýx£©//ÑØ×ó·ÖÖ¦ÏòÏ£¬ÕÒµÚÒ»¸öÖµ {f=p£»p=p->lchild £»} //fÊÇpµÄË«Ç×½áµãµÄÖ¸Õ룬ÇÒÖ¸ÏòµÚÒ»¸öÖµ¡ÝxµÄ½áµã if(p) f->lchild=null; //Ë«Ç×ÓëÕÒµ½µÄµÚÒ»¸öÖµ Print(bst)£»//Êä³öÒÔbstΪ¸ùµÄ×ÓÊ÷ }//while }//ÄÚ²ãif£¨p£© }//µÚÒ»²ãif£¨p£© }//PrintAllx 24£®[ÌâÄ¿·ÖÎö] ÒòΪTÊǶþ²æÅÅÐòÊ÷£¬Ôò¿ÉÀûÓöþ²æÅÅÐòÊ÷µÄÐÔÖÊ£¬´Ó¸ùÍùϲéÕÒ½áµã*x¡£ÈôTµÄ×ó×ÓÊ÷Ϊ¿Õ£¬ÔòÆäÖÐÐòÐòºÅΪ1£¬·ñÔòΪT->lchild->size+1¡£ÉèTµÄÖÐÐòÐòºÅΪr£¬Æä×ó×ÓÅ®pµÄÖÐÐòÐòºÅºÍÓÒ×ÓÅ®qµÄÖÐÐòÐòºÅ·Ö±ðΪr-p->rchild->size-1ºÍr+q->lchild->size+1¡£ int Rank£¨tree T£¬node *x£© // ÔÚ¶þ²æÅÅÐòÊ÷TÉÏ£¬Çó½áµãxµÄÖÐÐòÐòºÅ {if£¨T->lchild£©r=T->lchild->size+1£»else r=1£»//¸ù½áµãµÄÖÐÐòÐòºÅ while£¨T£© if£¨T->key>x->key£©//µ½×ó×ÓÊ÷È¥²éÕÒ {T=T->lchild£» if£¨T£©{if£¨T->rchild£©r=r-T->rchild->size-1£»else r=r-1£»} } else if£¨T->key if£¨T£©{if£¨T->lchild£©r=r+T->lchild->size+1£»else r=r+1£»} } else return £¨r£©£»//·µ»Ø*x½áµãµÄÖÐÐòÐòºÅ return £¨0£©£» //TÊ÷ÉÏÎÞx½áµã¡£
Ïà¹ØÍÆ¼ö£º