48£®Ê±¼ä¸´ÔÓ¶ÈÊÇÅжϼìË÷·½·¨µÄÒ»¸öÖØÒªÖ¸±ê£¬µ«²»ÊÇΨһָ±ê¡£Ê¹ÓÃʲô¼ìË÷·½·¨Òª×ۺϿ¼ÂÇ¡£¹þÏ£¼ìË÷ʱ¼äO£¨1£©£¬²éÕÒËÙ¶È×î¿ì£¬µ«Ðè¹¹½¨¹þÏ£º¯Êý£¬½øÐмÆËã¹þÏ£µØÖ·£¬²éÕÒʱҪÓнâ¾ö³åÍ»µÄ·½·¨£»¶þ·Ö¼ìË÷ʱ¼äO£¨log2n£©£¬ÐèÒªÔªËØÓÐÐòÇÒ˳Ðò´æ´¢£¬ÅÅÐò²Ù×÷µÄʱ¼ä¿ªÏú´ó£»Ë³Ê±¼ìË÷ʱ¼ä×î²îΪO£¨n£©£¬µ«¶Ô¼ìË÷±íÎÞÒªÇó£¬Êý¾ÝÓÐÐòÎÞÐò¾ù¿É£¬ÔÚÊý¾ÝÁ¿½ÏСʱʹÓ÷½±ã¡£ ·µ»Ø
Î壮Ëã·¨Éè¼ÆÌâ
1£® 1£® ¸ù¾Ý¶þ²æÅÅÐòÊ÷ÖÐÐò±éÀúËùµÃ½áµãֵΪÔöÐòµÄÐÔÖÊ£¬ÔÚ±éÀúÖн«µ±Ç°±éÀú½áµãÓë
ÆäǰÇý½áµãÖµ±È½Ï£¬¼´¿ÉµÃ³ö½áÂÛ£¬Îª´ËÉèÈ«¾ÖÖ¸Õë±äÁ¿pre£¨³õֵΪnull£©ºÍÈ«¾Ö±äÁ¿flag£¬³õֵΪtrue¡£Èô·Ç¶þ²æÅÅÐòÊ÷£¬ÔòÖÃflagΪfalse¡£ #define true 1 #define false 0 typedef struct node
{datatype data; struct node *llink,*rlink;} *BTree; void JudgeBST£¨BTree t,int flag£©
// Åж϶þ²æÊ÷ÊÇ·ñÊǶþ²æÅÅÐòÊ÷£¬±¾Ëã·¨½áÊøºó£¬ÔÚµ÷ÓóÌÐòÖÐÓÉflagµÃ³ö½áÂÛ¡£ { if£¨t!=null && flag£©
{ Judgebst£¨t->llink,flag£©£»// ÖÐÐò±éÀú×ó×ÓÊ÷
if£¨pre==null£©pre=t£»// ÖÐÐò±éÀúµÄµÚÒ»¸ö½áµã²»±ØÅÐ¶Ï else if£¨pre->data
±¾ÌâµÄÁíÒ»Ëã·¨ÊÇÕÕ¶¨Ò壬¶þ²æÅÅÐòÊ÷µÄ×óÓÒ×ÓÊ÷¶¼ÊǶþ²æÅÅÐòÊ÷£¬¸ù½áµãµÄÖµ´óÓÚ×ó×ÓÊ÷ÖÐËùÓÐÖµ¶øÐ¡ÓÚÓÒ×ÓÊ÷ÖÐËùÓÐÖµ£¬¼´¸ù½áµã´óÓÚ×ó×ÓÊ÷µÄ×î´óÖµ¶øÐ¡ÓÚÓÒ×ÓÊ÷µÄ×îСֵ¡£Ëã·¨ÈçÏ£º
int JudgeBST£¨BTree t£©
//Åж϶þ²æÊ÷tÊÇ·ñÊǶþ²æÅÅÐòÊ÷£¬ÈôÊÇ£¬·µ»Øtrue£¬·ñÔò£¬·µ»Øfalse {if£¨t==null£©return true£»
if£¨Judgebst£¨t->llink£©&& Judgebst£¨t->rlink£©£©//Èô×óÓÒ×ÓÊ÷¾ùΪ¶þ²æÅÅÐòÊ÷
{m=max£¨t->llink£©£»n=min£¨t->rlink£©£»//×ó×ÓÊ÷ÖÐ×î´óÖµºÍÓÒ×ÓÊ÷ÖÐ×îСֵ return £¨t->data>m && t->data int max£¨BTree p£©//Çó¶þ²æÊ÷×ó×ÓÊ÷µÄ×î´óÖµ {if£¨p==null£© return -maxint£»//·µ»Ø»úÆ÷×îСÕûÊý else{while£¨p->rlink£¡=null£©p=p->rlink£» return p->data£»} } int min£¨BTree p£©//Çó¶þ²æÊ÷ÓÒ×ÓÊ÷µÄ×îСֵ {if£¨p==null£© return maxint£»//·µ»Ø»úÆ÷×î´óÕûÊý else{while£¨p->llink£¡=null£©p=p->llink£» return p->data£»} } 2£®[ÌâÄ¿·ÖÎö]½èÖúÓÚ·Ö¿é²éÕÒ˼Ï룬ÔÚ½¨Á¢Êý¾Ý˳Ðò±íµÄͬʱ£¬½¨Á¢Ò»Ë÷Òý±í¡£Êý¾Ý±íÖа´k¸ö¼¯ºÏ·Ö¿é£¨ÔªËظöÊý²»Ò»¶¨ÏàµÈ£©£¬Ë÷Òý±íÖÐÓÐÁ½¸öÓò£¬Ò»ÊǸ÷¼¯ºÏ×îºóÒ»¸öÔªËØÔÚÊý¾Ý±íÖеÄλÖã¨Ò»Î¬Êý×éÖеÄϱ꣩£¬¶þÊǼ¯ºÏµÄ¸öÊý£¨k£©¡£ÊµÏÖÊý¾ÝÔËËãʱ£¬¸ù¾Ý¸ø¶¨µÄ¶þÔª×飨i£¬x£©£¬Ê×ÏÈÔÚË÷Òý±íÖÐÕÒµ½¼¯ºÏiµÄλÖã¬È»ºóÔÚÊý¾Ý±íÖвéÕÒx¡£Èç²éµ½x £¬Ôò²éÕҳɹ¦£¬·µ»ØxÔÚÊý¾Ý±íÖеÄλÖ㬷ñÔò²éÕÒʧ°Ü¡£ÈôÒª²åÈ룬Ôò½«Êý¾Ý±íÖеÄÊý¾ÝºóÒÆ£¬²åÈëx£¬Í¬Ê±ÐÞ¸ÄË÷Òý±í¡£ typedef struct {datatype data£»}rectype£» typedef struct {int a[]£»//aÊý×éÈÝÁ¿¹»´ó£¬´æ´¢¸÷¼¯ºÏ×îºóÒ»¸öÊý¾ÝÔÚÊý¾Ý±íÖеÄϱê int k£» //¼¯ºÏ¸öÊý }index£» int SetSearch_Insert£¨rectype R[]£¬index id£¬datatype x£¬int i£© //Êý¾Ý±íR£¬²éÕÒµÚi¸ö¼¯ºÏµÄÔªËØx£¬Èô²éÕҳɹ¦£¬·µ»ØÆäλÖ㬷ñÔò½«Æä²åÈëµÚi¸ö¼¯ºÏ {if£¨i<1 || i>id.k£©printf£¨¡°ÎÞµÚ%d¸ö¼¯ºÏ\\n¡±£¬i£©£»exit£¨0£©£»} if£¨i==1£©first=0£»else first=id.a[i-1]+1£» //firstÖ¸ÏòµÚi¸ö¼¯ºÏÔÚÊý¾Ý±íµÄÊ×Ö· last= id.a[i]£»//lastÊǵÚi¸ö¼¯ºÏÔÚÊý¾Ý±íÖеÄĩַ for£¨j=first£»j¡Ülast£»j++£© if£¨R[j]==x£©return £¨j£©£»//²éÕҳɹ¦ for£¨j=id.a[id.k]£»j>id.a[i]£»j--£© //²éÕÒʧ°Ü£¬½«x²åÈëÊý¾Ý±í R[j+1]=R[j]£»//ÔªËØºóÒÆ R[j+1]=x£» //½«x²åÈëµ½ÔµÚi¸ö¼¯ºÏ×îºóÒ»¸öÔªËØÖ®ºó¡£ for£¨j=i£»j¡Ük£»j++£©id.a[j]++£»//ÐÞ¸ÄË÷Òý±íÖи÷¼¯ºÏ×îºóÒ»¸öÔªËØµÄϱê }½áÊøSetSearch_Insert ÓÉÓÚ¸÷¼¯ºÏÔªËØ¸öÊý²»µÈ£¬¸÷¿é³¤¶È²»µÈÇÒ¿é¼äÎÞÐò£¬Ë÷Òý±íÖÐÓÃÊý×é±íʾ£¬Êý×éÖÐÔªËØÖµÊǸ÷¼¯ºÏ×îºóÒ»¸öÔªËØÔÚÊý¾Ý±íÖеÄϱꡣ°´±¾Ëã·¨²åÈ루2,11.2£©ºÍ£¨1,5.3£©£¬Êý¾Ý±íǰºó״̬ÈçÏ£º 0 ²åÈëǰ 10.2 1.7 4.8 16.2 1.7 8.4 0.5 4.8 4.2 3.6 2.7 5.1 3.9 ²åÈëºó 10.2 1.7 4.8 16.2 5.3 1.7 8.4 0.5 11.2 4.8 4.2 3.6 2.7 5.1 3.9 3£® void Delete£¨BSTree t£¬p£© // ÔÚ¶þ²æÅÅÐòÊ÷tÖУ¬É¾³ýfËùÖ¸½áµãµÄÓÒº¢×Ó£¨ÓÉpËùÖ¸Ïò£©µÄËã·¨ {if£¨p->lchild==null£©{f->rchild=p->rchild£»free£¨p£©£»} //pÎÞ×ó×ÓÅ® else //ÓÃp×ó×ÓÊ÷ÖеÄ×î´óÖµ´úÌæp½áµãµÄÖµ {q=p->lchild£»s=q£» while£¨q->rchild£©{s=q£»q=q->rchild £»}//²ép×ó×ÓÊ÷ÖÐÐòÐòÁÐ×îÓÒ½áµã if£¨s==p->lchild£© //p×ó×ÓÊ÷µÄ¸ù½áµãÎÞÓÒ×ÓÅ® {p->data=s->data£»p->lchild=s->lchild£»free£¨s£©£»} else{p->data=q->data£»s->rchild=q->lchild£»free£¨q£©£»} } }//Delete 4£®[ÌâÄ¿·ÖÎö]ÉÏÌâÓñ»É¾½áµã×ó×ÓÊ÷ÖÐ×î´óÖµ½áµã´úÌæ±»É¾½áµã£¬±¾ÌâÓñ»É¾½áµãÓÒ×ÓÊ÷ÖÐ×îСֵ£¨ÖÐÐò±éÀúµÚÒ»¸ö£©½áµã´úÌæ±»É¾½áµã¡£ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void Delete(BSTree bst,p,fp) //ÔÚ¶þ²æÅÅÐòÊ÷bstÉÏ£¬É¾³ýfpËùÖ¸½áµãµÄ×ó×ÓÅ®£¨ÓÉpËùÖ¸Ïò£©µÄËã·¨¡£ {if£¨!p->lchild£©{fp->lchild=p->rchild£»free£¨p£©£»} //pÎÞ×ó×ÓÅ® else if£¨!p->rchild£©{fp->lchild=p->lchild£»free£¨p£©£»} //pÎÞÓÒ×ÓÅ® else // pÓÐ×ó×ÓÅ®ºÍÓÒ×ÓÅ® {q=p->rchild£»s=q£»//ÓÃpÓÒ×ÓÊ÷ÖеÄ×îСֵ´úÌæp½áµãµÄÖµ while£¨q->lchild£©{s=q£»q=q->lchild £»}//²épÓÒ×ÓÊ÷ÖÐÐòÐòÁÐ×î×ó½áµã if£¨s==p->rchild£© //pÓÒ×ÓÊ÷µÄ¸ù½áµãÎÞ×ó×ÓÅ® {p->data=s->data£»p->rchild=s->rchild£»free£¨s£©£»} else{p->data=q->data£»s->lchild=q->rchild£»free£¨q£©£»} }//Delete 5£®[ÌâÄ¿·ÖÎö] ÔÚ¶þ²æÅÅÐòÊ÷ÉÏɾ³ý½áµã£¬Ê×ÏÈÒª²éÕҸýáµã¡£²éÕҳɹ¦ºó£¬Èô¸Ã½áµãÎÞ×ó×ÓÊ÷£¬Ôò¿ÉÖ±½Ó½«ÆäÓÒ×ÓÊ÷µÄ¸ù½áµã½Óµ½ÆäË«Ç×½áµãÉÏ£»Èô¸Ã½áµãÓÐ×ó×ÓÊ÷£¬Ôò½«Æä×ó×ÓÊ÷Öа´ÖÐÐò±éÀúµÄ×îºóÒ»¸ö½áµã´úÌæ¸Ã½áµã£¬´Ó¶ø²»Ôö¼ÓÊ÷µÄ¸ß¶È¡£ void Delete(BSTree bst, keytype X) //ÔÚ¶þ²æÅÅÐòÊ÷bstÉÏ£¬É¾³ýÆä¹Ø¼ü×ÖΪXµÄ½áµã¡£ {BSTree f,p=bst; while (p && p->key!=X) //²éÕÒֵΪXµÄ½áµã if (p->key>X) {f=p; p=p->lchild;} else {f=p; p=p->rchild;} if (p==null) {printf(¡°Î޹ؼü×ÖΪXµÄ½áµã\\n¡±); exit(0);} if {p->lchild==null} //±»É¾½áµãÎÞ×ó×ÓÊ÷ if (f->lchild==p) f->lchild=p->rchild;//½«±»É¾½áµãµÄÓÒ×ÓÊ÷½Óµ½ÆäË«Ç×ÉÏ else f->rchild=p->rchild; else {q=p; s=p->lchild; //±»É¾½áµãÓÐ×ó×ÓÊ÷ while (s->rchild !=null) //²é×ó×ÓÊ÷ÖÐ×îÓÒϵĽáµã£¨ÖÐÐò×îºó½áµã£© {q=s; s=s->rchild;} p->key=s->key; //½áµãÖµÓÃÆä×ó×ÓÊ÷×îÓÒϵĽáµãµÄÖµ´úÌæ if (q==p) p->lchild=s->lchild;//±»É¾½áµã×ó×ÓÊ÷µÄ¸ù½áµãÎÞÓÒ×ÓÅ®