±±¾©½»Í¨´óѧ¼ÆËã»úöλÔÓéÀֵǼÈë¿ÚÏÂÔØöλÔÓéÀÖ¹Ù·½appÏÂÔØ¸¨µ¼°à±Ê¼Ç£¨Êý¾Ý½á¹¹£©(4)
±±¾©½»Í¨´óѧ /2009-04-04
{ if (pin[i]= =ch) b=true;
else i++;
}
if (b= =true) return i;
}
Void Creat(Bitree &T, int pp, int pi, int n)
//pre[]Ϊ¶þ²æÊ÷µÄÏÈÐòÐòÁУ¬ppΪ×ÓÊ÷ÔÚÏÈÐòÐòÁÐÖÐµÄÆðʼϱ꣬ino[]Ϊ¶þ²æÊ÷µÄÖÐÐòÐòÁУ¬piΪ×ÓÊ÷ÔÚÖÐÐòÖÐµÄÆðʼϱ꣬nΪÊ÷ÖнáµãÊý£»
{ if (n<=0) T=Null;
else
{ T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=pre[pp]; m=pos(pre[pp],ino,pi);
Llen=m-pi; Rlen=n-Llen-1; //ÇóTµÄ×óÓÒ×ÓÊ÷ÔÚÖÐÐòÖеij¤¶È
Create(T->lch,pp+1,pi,Llen); //½¨Á¢×ó×ÓÊ÷
Create(T->rch,pp+Llen+1,m+1,Rlen); //½¨Á¢ÓÒ×ÓÊ÷
}
}
£±£±. Óɶþ²æÊ÷µÄÖÐÐòºÍºóÐòÐòÁн¨Á¢¶þ²æÊ÷
ÄÜÊÖ¹¤×÷³ö£¬Ïà¹Ø³ÌÐò²ÎÔÄ£¨04Äê³ÌÐòÔĶÁµÚÒ»Ì⣩ÀÏʦûÓÐд³ö³ÌÐò¡£
£±£². °´¸ø¶¨µÄ±í´ïʽ½¨Á¢ÏàÓ¦¶þ²æÁ´±í
(£±) ÓÉÏÈ׺±í´ïʽ½¨Ê÷£¨ÓëÆÕͨ¶þ²æÊ÷µÄÇø±ðÊÇ£ºÎÞ¶ÈΪ1µÄ½áµã£¬Ö»ÓжÈΪ0»ò2µÄ½áµã£¬ÒòΪ²Ù×÷ÊýÓÐ2¸ö£©£¬¿ÉΨһȷ¶¨¶þ²æÊ÷
(£²) ÓÐÔ±í´ïʽ½¨Ê÷£¬ÒªÏȽ«Æäת»¯Îª¶ÔÓ¦µÄÏÈ׺ÐÎʽ
13£®ÏßË÷¶þ²æÊ÷µÄ¶¨Òå
14£®ÏÈÐò±éÀú¶þ²æÊý£¨¿¼Ìî¿Õ»òÑ¡Ôñ£¬ÊéÉÏûÓУ¬¼Çס£©
(£±) ²ÉÓöþ²æÁ´±í
ÎÞÂÛÊÇ·ñÊÇÒ¶×Ó½áµã£¬ÕÒ½áµãPµÄÏÈÐòǰÇý¶¼²»ÈÝÒ×£¬µÃ´Ó¸ù½áµã¿ªÊ¼£»
ÈôP·ÇÒ¶×Ó£¬ÕÒPµÄÏÈÐòºó¼Ì£¬ÈÝÒ×£¨ÓÐ×óº¢×ӵľÍÊÇÆä×óº¢×Ó£¬ÎÞ×óº¢×ÓÔòÊÇÓÒº¢×Ó£©£¬²»ÓôӸù½áµã¿ªÊ¼£»ÈôPÊÇÒ¶×Ó½áµã£¬ÕÒÏÈÐòºó¼ÌÒ²²»ÈÝÒ×
(£²) ²ÉÓÃÏßË÷¶þ²æÁ´±í£¬ÕÒPµÄÏÈÐòǰÇý
(a) PÊǸù£¬Ç°ÇýΪ¿Õ£»
(b) PÊÇÆäË«Ç×µÄ×óº¢×Ó£¬Ç°ÇýΪ˫Ç×
(c) PÊÇÆäË«Ç×µÄÓÒº¢×Ó£¬ÇÒÎÞ×óÐÖ£¬ÔòǰÇýÊÇÆäË«Ç×
(d) PÊÇÆäË«Ç×µÄÓÒº¢×Ó£¬ÇÒÓÐ×óÐÖ£¬ÔòǰÇýÊÇÆä×óÐÖ×îÓÒϵÄÒ¶×Ó
¼´Ê¹ÊÇÏßË÷¶þ²æÁ´±í£¬ÕÒPµÄÏÈÐòǰÇý¾ù²»ÈÝÒ×
£¨3£©²ÉÓÃÏßË÷¶þ²æÁ´±í£¬ÕÒPµÄÏÈÐòºó¼Ì
(a) PÓÐÓÒº¢×Ó
PÓÐ×óº¢×Ó£¬Ôòºó¼ÌΪÆä×óº¢×Ó£»
PÎÞ×óº¢×Ó£¬Ôòºó¼ÌΪÆäÓÒº¢×Ó£»
(b) PÎÞÓÒº¢×Ó£¬ Ôòºó¼ÌΪÆärch;
BinNode *findson(BinNode *p)
{ if (p->ltag= =0) return p->lch; //pÓÐ×óº¢×Ó£¬ºó¼ÌΪ×óº¢
else return p->rch; //pÎÞ×󺢣¬ºó¼ÌΪÆäÓÒÖ¸Õë
}
15. ÖÐÐò±éÀú¶þ²æÊ÷
(1). ²ÉÓöþ²æÁ´±í
Èô×óÓÒ×ÓÊ÷·Ç¿Õ£¬ÕÒpµÄÖÐÐòǰÇýºÍÖÐÐòºó¼ÌÈÝÒ×£¬²»ÓôӸù¿ªÊ¼
Èô×óÓÒ×ÓÊ÷Ϊ¿Õ£¬ÕÒpµÄÖÐÐòºó¼ÌºÍǰÇý£¬²»ÈÝÒ×£¬µÃ´Ó¸ù¿ªÊ¼
16. ºóÐò±éÀú¶þ²æÊ÷
(1). ²ÉÓöþ²æÁ´±í
ÈôP·ÇÒ¶×Ó£¬ÔòÕÒPµÄºóÐòǰÇý£¬ÈÝÒ×£¬²»ÓôӸù¿ªÊ¼£»ÈôPÊÇÒ¶×Ó£¬ÕÒºóÐòǰÇý²»ÈÝÒ×£»
ÕÒPµÄºóÐòºó¼Ì£¬ÎÞÂÛÊÇ·ñÊÇÒ¶×Ó£¬¶¼²»ÈÝÒ×£¬µÃ´Ó¸ù¿ªÊ¼
(2)²ÉÓÃÏßË÷¶þ²æÊ÷£¬ÕÒPµÄºóÐòǰÇý
(a). PÓÐ×óº¢×Ó
PÓÐÓÒº¢×Ó£¬ÔòǰÇýΪÆäÓÒº¢
PÎÞÓÒº¢×Ó£¬ÔòÆäǰÇýΪÆä×óº¢
(b).PÎÞ×óº¢×Ó£¬ ǰÇýΪÆälch
BinNode *findpre(BiNode *p)
{ if (p->rtag= =0) return p->rch; //PÓÐÓÒ£¬Ç°ÇýΪÓÒº¢×Ó
else return p->lch; //pÎÞÓÒº¢£¬Ç°ÇýΪÆä×óÖ¸Õë¡£
(3). ²ÉÓÃÏßË÷¶þ²æÊ÷£¬ÕÒPµÄºóÐòºó¼Ì
(a). PÊǸù£¬ ºó¼ÌΪ¿Õ
(b). PÊÇË«Ç×½áµãµÄÓÒº¢×Ó£¬ºó¼ÌΪ˫Ç×
(c). P ÊÇË«Ç×µÄ×óº¢×Ó£¬ÇÒÎÞÓÒÐÖ£¬ºó¼ÌΪ˫Ç×
(d).PÊÇË«Ç×½áµãµÄ×óº¢×Ó£¬ÓÐÓÒÐÖ£¬ºó¼ÌΪÓÒÐÖ×î×óϵÄÒ¶×Ó¡£
ºóÐòÏßË÷¶þ²æÁ´±íÖУ¬ÕÒºó¼Ì²»ÈÝÒ×
17. Ê÷µÄ´æ´¢½á¹¹
Ê÷µÄ¶þ²æÁ´±í£¨º¢×Ó-Ðֵܣ©´æ´¢±íʾ·¨£¨±ØÐëÕÆÎÕ£©
18. ÉÁÖת»»³É¶þ²æÊ÷£º½«¸÷¿ÆÊ÷·Ö±ðת»»³É¶þ²æÊ÷£¬½«¸ù½áµãÓÃÏßÏàÁ¬£¬ÒÔµÚÒ»¿ÃÊ÷¸ù½áµã×÷ΪÊ÷µÄ¸ù£¬°ÑÏß˳ʱÕëת45¶È
19. ¶þ²æÊ÷ת»¯³ÉÉÁÖ£º
¡¡¡¡Ò»Ä¨Ïߣº¡¡½«¶þ²æÊ÷ÖеĸùÓëÆäÓÒº¢×ÓµÄÁ¬Ïߣ¬¼°ÓÒ·ÖÖ§ËÑË÷µ½µÄËùÓÐÓÒº¢×ÓµÄÁ¬ÏßÈ«²¿Ä¨µô£¬Ê¹Ö®±ä³É¹ÂÁ¢µÄ¶þ²æÊ÷¡£
¡¡¡¡Ò»»¹Ô£º¡¡½«¹ÂÁ¢µÄ¶þ²æÊ÷»¹Ô³ÉÊ÷
£²£°. Ê÷µÄ±éÀú¡¡£¨Ïȸù£¬ºó¸ù£©
£²£±. ÉÁֵıéÀú
(£±) ÏÈÐò±éÀú£º¼´ÒÀ´Î´Ó×óÖÁÓÒ¶ÔÉÁÖÖеÄÿһ¿ÃÊ÷½øÐÐÏȸù±éÀú
(£²) ÖÐÐò±éÀú£º¼´ÒÀ´Î´Ó×óÖÁÓÒ¶ÔÉÁÖÖеÄÿ¿ÃÊ÷½øÐкó¸ú±éÀú
£²£². Ê÷£¬¶þ²æÊ÷£¬ÉÁÖ±éÀúµÄ¶ÔÓ¦¹ØÏµ
Ê÷ ÉÁÖ ¶þ²æÊ÷
Ïȸù ÏÈÐò ÏÈÐò
ºó¸ù ÖÐÐò ÖÐÐò
23£®ÇóÊ÷µÄÉî¶ÈµÄËã·¨
µÝ¹é¹«Ê½ÈçÏ£º
depth(t)=0 Èôt=Null
depth(t)=max{depth(t->firstchilid)+1, depth(t->nextsibling)}
int TreeDepth(CsTree T)
{ if (!T) return();
else { h1=TreeDepth(T->firstchild);
h2=TreeDepth(T->nextsibling);
return(max((h1+1),h2)); //Ìî³ÌÐòʱ²»ÄÜÖ±½ÓдMax£¬ÒªÐ´³É¿ÉÖ´ÐÐÓï¾ä£¨ÓÃif else £©
}
return ((h1+1)>h2 ? (h1+1): h2);
}
24.¹éÇóÊ÷ÖÐÒ¶×Ó½áµãµÄ¸öÊý £¨04ÄêÕæÌ⣩
Ê÷ÖеÄÒ¶×Ó½áµãÊǶþ²æÊ÷ÖÐfirstchild Ϊ¿ÕµÄ½áµã
½â1£º int Countleaf(CsNode *T)
{int leaf; CsNode *T1;
if (!T) return 0;
else {if (!T->fch) return 1;
else { leaf=0; T1=T->fch;
while (T1)
{leaf=leaf+Countleaf(T1);
T1=T1->nsib;
}
return leaf;
}
}
}
½â2£º int Countleaf(CsNode *T)
{ int leaf; CsNode *T1;
if (!T) return 0;
else { if (!T->fch)
{ leaf=1+Countleaf(T->nsb); return(leaf);}
else
{ leaf=Countleaf(T->fch)+Countleaf(T->nsb); return(leaf)}
