±±¾©½»Í¨´óѧ¼ÆËã»úöλÔÓéÀֵǼÈë¿ÚÏÂÔØöλÔÓéÀÖ¹Ù·½appÏÂÔØ¸¨µ¼°à±Ê¼Ç£¨Êý¾Ý½á¹¹£©(3)
±±¾©½»Í¨´óѧ /2009-04-04
n0+n1+¡.+Nm=¡Æi*ni +1 £¨ÇóºÍµÄÏÂÏÞÊÇi=1,ÉÏÏÞÊÇm£©
n0=¡Æ(i-1)*ni +1
£³. Á½ÀàÌØÊâµÄ¶þ²æÊ÷£º¡¡Âú¶þ²æÊ÷£¨½áµãÊýΪ2**k-1¸ö£©£¬ÍêÈ«¶þ²æÊ÷£¨½áµãºÅÓëÂú¶þ²æÊ÷±ØÐë¶ÔÓ¦£©
£´. ÐÔÖÊ£´µÄÖ¤Ã÷¡¡£¨ÊéÉÏÓÐÖ¤Ã÷£©
£µ. ¶þ²æÊ÷µÄ´æ´¢½á¹¹£¨ÊéÉϵ͍ÒåÒ»¶¨Òª¼Çס£©
˳Ðò´æ´¢½á¹¹¡¡¡¡¡¡¡¡Á´Ê½´æ´¢
¶þ²æ£º¡¡¡¡¿ÕÓò¡¡¡¡¡¡n+1
Èý²æ£º ¿ÕÓò n+2
Ò»°ãÓУºÔÚÒ»¿ÃÓÐn¸ö½áµã£¬¶ÈΪkµÄÊ÷ÖбØÓÐn*(k-1)+1¸ö¿ÕÁ´Óò
£¶. ¸÷ÖÖ±éÀúµÄµÝ¹éºÍ·ÇµÝ¹éËã·¨¾ùÓ¦ÊìÁ·ÕÆÎÕ
ÖÐÐò·ÇµÝ¹é¼ûP130
ÏÈÐò·ÇµÝ¹é²Î¿´Ïà¹ØµÄöλÔÓéÀÖ¹Ù·½appÏÂÔØ
ºóÐò·ÇµÝ¹é£º
Void postorder_fei(BinNode *t)
{¡¡BinNode *p;
¡¡¡¡¡¡¡¡¡¡printf(¡°post_order_fei : ¡°');
¡¡¡¡¡¡¡¡ ¡¡top=0; stack[top]=t;
¡¡¡¡¡¡¡¡¡¡while (top!=-1)
¡¡¡¡¡¡¡¡¡¡{ while (stack[top])
¡¡¡¡¡¡ { top=top+1;
¡¡¡¡¡¡stack[top]=stack[top-1]->lch;
¡¡¡¡¡¡top=top-1;
if (top!=-1)
¡¡¡¡¡¡¡¡¡¡{ p=stack[top];
¡¡¡¡¡¡¡¡¡¡¡¡if( (!p->rch) || (p->rch->visited==1))
¡¡¡¡¡¡¡¡¡¡ { stack[top]=null;
¡¡¡¡¡¡¡¡¡¡ printf(¡°%c¡±,p->data); p->visited=1;
¡¡¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ { top=top+1; stack[top]=p->rch; }
¡¡¡¡¡¡¡¡¡¡}
}
}
¡¡¡¡¡¡¡¡¡¡£ý
£·. ±éÀúËã·¨µÄÓ¦ÓþÙÀý
(£±) Çó¶þ²æÊ÷ÖÐÒ¶×Ó½áµãµÄ¸öÊý¡££¨ÏÈÐò£¨ÖÐÐò£¬ºóÐò£©±éÀú¶þ²æÊ÷£¬ÉèÒ»¸öÈ«¾Ö±äÁ¿×÷Ϊ¼ÆÊýÆ÷£¬×óÓÒÖ¸ÕëΪ¿ÕµÄ½áµãΪҶ½áµã£©
int countleaf(BinTree T)
{ int n1,n2;
if (!T) return 0;
else { if ((!T->lchild)&&(!T->rchild))
return 1;
else { n1=countleaf(T->lchild); //n1´æ·Å×ó×ÓÊ÷µÄÒ¶½áµãÊý
n2=countleaf(T->rchild);// n2´æ·ÅÓÒ×ÓÊ÷µÄÒ¶½áµãÊý
return(n1+n2);
}
}
}
(£²) Çó¶þ²æÊ÷Éî¶È£¨ºóÐò±éÀú¡¡£©
»ù±¾Ë¼Ï룺¶þ²æÊ÷µÄÉî¶ÈΪ×óÓÒ×ÓÊ÷µÄ×î´óÉî¶È¼Ó£±
int Depth(BinTree T)
{ int dep,dep1,dep2;
if (!T) dep=0;
else { dep1=Depth(T->lch);
dep2=Depth(T->rch);
dep=1+(dep1>dep2 ? dep1: dep2);
}
return dep;
}
(£³) ¸´Öƶþ²æÊ÷£¨ÏÈÐò±éÀú£©
Void copytree(BinTree root, BinTree *newroot) //newrootΪָÏòÖ¸ÕëµÄÖ¸Õë
¡¡£ûif (!root) *newroot=Null;
else
{ *newroot=(BinNode*)malloc(sizeof(BinNOde));
(*newroot)->data=root->data;
copytreer(root->lchild, &((*newroot)->lchild));//¸´ÖƵ½×ó×ÓÊ÷
copytree(root->rchild, &((*newroot)->rchild));//¸´ÖƵ½ÓÒ×ÓÊ÷
¡¡£ý
£ý
(£´) ½»»»¶þ²æÊ÷µÄ×óÓÒ×ÓÊ÷(ÀàËÆÏÈÐò±éÀú£¬ÓúóÐòÒ²¿ÉÒÔ£¬µ«ÖÐÐò²»ÐÐ)
Void exchange(BinNode *T)
{ BinNode *q;
if (T)
{ q=T->lchild;
T->lchild=T->rchild;
T->rchild=q;
exchange(T->lchild);
exchange(T->rchild);
}
}
¡¡¡¡¡¡¡¡¡¡(5)½¨Á¢¶þ²æÊ÷µÄ´æ´¢½á¹¹£¨²»Í¬µÄ¶¨Òå·½·¨ÏàÓ¦Óв»Í¬µÄ´æ´¢½á¹¹£¬ÏÖÒÔ×Ö·û´®µÄÐÎʽ¡¡¸ù¡¡×ó×ÓÊ÷¡¡¡¡ÓÒ×ÓÊ÷¶¨ÒåÒ»¿Ã¶þ²æÊ÷£¨¼´¶þ²æÊ÷µÄÀ©Õ¹ÐòÁУ©
¡¡¡¡¡¡¡¡¡¡¡¡È磺¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡ÒÔ×Ö·û´®AB*C**D** (*ºÅ±íʾ¿Õ×Ö·û)
status CreatBitree(BiTree &T) //°´ÏÈÐòÀ©Õ¹ÐòÁн¨Á¢¶þ²æÊ÷µÄµÝ¹éËã·¨
¡¡£û¡¡scanf(&ch);
if (ch= =¡¯ ¡®) T=Null;
else{ if (!(T=(BinNode*)malloc(sizeof(BinNode))));
exit(overflow);
T->data=ch;
CreatBitree(T->lchild);
CreatBitree(T->rchild);
}
return ok;
}
7. ÒÑÖª°´Ä³¹æÂɱéÀú¶þ²æÊ÷µÄ·ÇÀ©Õ¹ÐòÁУ¨Ò²¼´ÓÉÏÈÐò£¬ÖÐÐò£¬ºóÐò±éÀú¶øµÃµÄÐòÁУ©£¬ÊÇ·ñ¿ÉÒÔΨһȷ¶¨¸Ã¶þ²æÊ÷µÄ½á¹¹£¿
½áÂÛ£º°´Ä³¹æÂɱéÀú¶þ²æÊ÷µÄ·ÇÀ©Õ¹ÐòÁв»ÄÜΨһȷ¶¨¸Ã¶þ²æÊ÷µÄ½á¹¹
£¸. ÒÑÖª°´Ä³¹æÂɱéÀú¶þ²æÊ÷µÄÀ©Õ¹ÐòÁУ¬ÄÜ·ñΨһȷ¶¨¸Ã¶þ²æÊ÷µÄ½á¹¹£¿
½áÂÛ£ºÏÈÐòÀ©Õ¹ÐòÁÐÄÜΨһȷ¶¨¡¡¡¡¡¡ÖÐÐòÀ©Õ¹ÐòÁв»ÄÜΨһȷ¶¨
ºóÐòÀ©Õ¹ÐòÁÐÄÜΨһȷ¶¨£¨´ÓºóÍùÇ°ÍÆµ¼£©
¡¡¡¡¡¡¡¡¡¡//°´ºóÐò±éÀúÀ©Õ¹ÐòÁн¨Á¢¶þ²æÊ÷½á¹¹µÄµÝ¹éËã·¨
¡¡¡¡¡¡¡¡¡¡Void crt_bt_post(Bitreeptr *bt)
{ if (i>=s.len) //IÊÇÈ«¾Ö±äÁ¿£¬³õʼֵΪ£°£¬s´æ·ÅºóÐòÀ©Õ¹ÐòÁÐ×Ö·ûºÍ³¤¶È
{ bt=stack[top]; top=top-1;} //ÈëÕ»
else
{ i++; c=s.ch[i];¡¡
¡¡¡¡if (c=¡¯ ¡®) *bt=Null;
else { *bt=(BiNode*)malloc(sizeof(BiNode));
(*bt)->data=c;
(*bt)->rch=stack[top]; top=top-1;
(*bt)->lch=stack[top]; top=top-1;
}
top=top+1; stack[top]=*bt;
crt_bt_post(&bt);
}
}
£¹. ²ã´Î±éÀúij¶þ²æÊ÷µÄÀ©Õ¹ÐòÁпÉÒÔΨһȷ¶¨¶þ²æÊ÷µÄ´æ´¢½á¹¹
°´²ã´Î±éÀúµÄÀ©Õ¹ÐòÁн¨Á¢¶þ²æÊ÷·ÇµÝ¹éËã·¨£¨pascal£©
getnode(var bt: bitreptr)
begin
i=i+1; e=s.ch[i];
if (c=¡¯ ¡®) then bt=nil;
else begin
new(bt); bt->data=c; que.rear=que.rear+1; que.elem[que.rear]=bt;
end
end
proceede crt_bt_level( var bt:bitreptr)
var p:bitreptr;
begin
que.front=0; que.rear=0; getnode(bt);
while que.rear<>que.front do
begin
que.front=que.front+1;
p=que.elem[que.front];
getnode(p->lch); getnode(p->rch);
end
end
£±£°. Óɶþ²æÊ÷µÄÏÈÐòºÍÖÐÐò½¨Á¢¶þ²æÊ÷£¨ÒªÇó»áÊÖ¹¤×ö£©
Int pos(char ch; char pin[]; int start) //¶¨Î»£ºchÔÚÖÐÐòÖеÄλÖÃ
{ i=start; b=false;
while ((i<=n)&&!b)
