ΪiºÍj£¨0
½â£ºÓɶþ²æÊ÷˳Ðò´æ´¢½á¹¹Ìص㣬¿ÉµÃµ½ÒÔÏÂÇóÀëiºÍjµÄÁ½¸ö½áµã×î½üµÄ¹«¹²×æÏȽáµãµÄËã·¨£º
ElemType Ancestor(ElemType A[],int i,int j) { }
int p=i,q=j; while (p!=q)
if (p>q) p=p/2; else q=q/2;
return A[p];
£¨2£©ÒÑÖªÒ»¿Ã¶þ²æÊ÷²ÉÓÃ˳Ðò·½Ê½´æ´¢ÔÚÊý×éA[1..n]ÖС£Éè¼ÆÒ»¸öÏÈÐò±éÀúµÄµÝ¹éËã·¨¡£
½â£ºÏÈÐò±éÀúÊ÷ÖнáµãµÄµÝ¹éËã·¨ÈçÏ£º
void PreOrder1(ElemType A[],int i,int n) { }
if (i if (A[i]!='#') { } //²»Îª¿Õ½áµãʱ //±éÀú×ó×ÓÊ÷ printf(\ PreOrder1(A,2*i,n); //·ÃÎʸù½áµã //±éÀúÓÒ×ÓÊ÷ PreOrder1(A,2*i+1,n); £¨3£©¼ÙÉè¶þ²æÊ÷²ÉÓöþ²æÁ´´æ´¢½á¹¹¡£Éè¼ÆÒ»¸öËã·¨ÇóÒ»¿Ã·Ç¿Õ¶þ²æÊ÷ÖеÄ×î´ó½áµã Öµ¡£ ½â£ºÇóÒ»¸ö¶þ²æÊ÷ÖеÄ×î´ó½áµãÖµµÄµÝ¹éÄ£ÐÍÈçÏ£º f(bt)=bt->data Ö»ÓÐÒ»¸ö½áµãʱ f(bt)=Max{f(bt->lchild),f(bt->rchild),bt->data} ÆäËûÇé¿ö ¶ÔÓ¦µÄËã·¨ÈçÏ£º ElemType MaxNode(BTNode *bt) { } ElemType max,max1,max2; if (bt->lchild==NULL && bt->rchild==NUL) else { } max1=MaxNode(bt->lchild); //Çó×ó×ÓÊ÷µÄ×î´ó½áµãÖµ max2=MaxNode(bt->rchild); //ÇóÓÒ×ÓÊ÷µÄ×î´ó½áµãÖµ max=bt->data; if (max1>max) max=max1; if (max2>max) max=max2; return(max); //Çó×î´óÖµ //·µ»Ø×î´óÖµ return bt->data; £¨4£©¼ÙÉ躬ÓÐn¸ö½áµãµÄ¶þ²æÊ÷²ÉÓöþ²æÁ´´æ´¢½á¹¹¡£Éè¼ÆÒ»¸öËã·¨Êä³öÖÐÐò±éÀúÐòÁÐÖеĵÚk£¨1¡Üi¡Ün£©¸ö½áµãÖµ¡£ Êý¾Ý½á¹¹¼òÃ÷½Ì³Ì ½â£º¶ÔÓ¦µÄËã·¨ÈçÏ£º int i=0; { } //iΪȫ¾Ö±äÁ¿ void Trav(BTNode *bt,int k) if (bt!=NULL) { } Trav(bt->lchild,k); i++; if (i==k) { } Trav(bt->rchild,k); //±éÀúÓÒ×ÓÊ÷ printf(\return; //±éÀú×ó×ÓÊ÷ £¨5£©¼ÙÉè¶þ²æÊ÷²ÉÓöþ²æÁ´´æ´¢½á¹¹£¬Éè¼ÆÒ»¸öËã·¨Level()Çó¶þ²æÊ÷ÖнáµãֵΪxµÄ½áµãµÄ²ãÊý¡£ ½â£º¶ÔÓ¦µÄµÝ¹éËã·¨ÈçÏ£º int Level(BTNode *bt,ElemType x,int h) //µ÷ÓÃh¶ÔÓ¦µÄʵ²ÎÖóõÖµ1 { } int l; if (bt==NULL) else { } l=Level(bt->lchild,x,h+1); if (l!=0) return l; //ÔÚ×ó×ÓÊ÷ÖÐδÕÒµ½,ÔÙÔÚÓÒ×ÓÊ÷ÖвéÕÒ return(Level(bt->rchild,x,h+1)); else //ÔÚ×ó×ÓÊ÷ÖвéÕÒ return 0; return h; else if (bt->data==x) ÉÏ»úʵÑéÌâ6 ¼ÙÉèÒ»¿Ã¶þ²æÊ÷²ÉÓöþ²æÁ´´æ´¢½á¹¹£¬ÆäÖÐËùÓнáµãÖµ¾ù²»Ïàͬ¡£Éè¼ÆÒ»¸öËã·¨Çó´Ó¸ù½áµãµ½ÖµÎªxµÄ½áµãµÄ·¾¶¡£²¢ÓÃÏà¹ØÊý¾Ý½øÐвâÊÔ¡£ ½â£º²ÉÓõݹéºÍ²ã´Î±éÀúÁ½ÖÖÇó½â·½·¨£¬¶ÔÓ¦µÄ³ÌÐòÈçÏ£º #include void Path1(BTNode *bt,ElemType x,ElemType path[],int pathlen) { int i; if (bt!=NULL) { if (bt->data==x) //ÕÒµ½ÖµÎªxµÄ½áµã } void Path2(BTNode *bt,ElemType x) { BTNode *p; ElemType path[MaxSize]; int i,d; struct { BTNode *s; int parent; //´æ·Å½áµãÖ¸Õë //´æ·ÅÆäË«Ç×½áµãÔÚquÖеÄϱê //qu´æ·Å¶ÓÖÐÔªËØ } { } else { } path[pathlen]=bt->data; pathlen++; //½«µ±Ç°½áµã·ÅÈë·¾¶ÖÐ //pathÖÐÔªËØ¸öÊýÔö1 printf(\´Ó¸ù½áµãµ½%c½áµãµÄ·¾¶: \for (i=0;i printf(\¡ú\printf(\return; Path1(bt->lchild,x,path,pathlen); Path1(bt->rchild,x,path,pathlen); //µÝ¹é±éÀú×ó×ÓÊ÷ //µÝ¹é±éÀúÓÒ×ÓÊ÷ } qu[MaxSize]; rear++; qu[rear].s=bt; int front=-1,rear=-1; //¶ÓÍ·¶ÓβָÕë //¸ù½áµã½ø¶Ó //¸ù½áµãûÓÐË«Ç×,ÆäparentÖÃΪ-1 //¶Ó²»¿ÕÑ»· //³ö¶ÓÒ»¸ö½áµã*p,ËüÔÚquÖеÄϱêΪfront //ÕÒµ½ÖµÎªxµÄ½áµã qu[rear].parent=-1; while (front!=rear) { front++; p=qu[front].s; { } if (p->data==x) printf(\´Ó¸ù½áµãµ½%c½áµãµÄ·¾¶: \d=0; path[d]=p->data; i=qu[front].parent; while (i!=-1) { } printf(\for (i=d-1;i>=0;i--) printf(\¡ú%c\printf(\ //*pÓÐ×óº¢×Ó,½«×óº¢×Ó½ø¶Ó d++; path[d]=qu[i].s->data; i=qu[i].parent; if (p->lchild!=NULL) Êý¾Ý½á¹¹¼òÃ÷½Ì³Ì } void main() { } BTNode *bt; ElemType path[MaxSize],x='I'; CreateBTree(bt,\printf(\½â·¨1:\\n\Path1(bt,x,path,0); printf(\½â·¨2:\\n\Path2(bt,x); //½¨Á¢Í¼6.14µÄ¶þ²æÁ´ printf(\À¨ºÅ±íʾ·¨:\ } { } if (p->rchild!=NULL) { } rear++; qu[rear].s=p->rchild; qu[rear].parent=front; //ÓÒº¢×ÓµÄË«Ç×Ϊqu[front]½áµã //*pÓÐÓÒº¢×Ó,½«ÓÒº¢×Ó½ø¶Ó rear++; qu[rear].s=p->lchild; qu[rear].parent=front; //×óº¢×ÓµÄË«Ç×Ϊqu[front]½áµã Á·Ï°Ìâ7 1. µ¥ÏîÑ¡ÔñÌâ £¨1£©ÔÚÒ»¸öͼÖУ¬ËùÓж¥µãµÄ¶ÈÊýÖ®ºÍµÈÓÚͼµÄ±ßÊýµÄ£¨ £©±¶¡£ A.1/2 B.1 C.2 D.4 ´ð£ºC £¨2£©ÔÚÒ»¸öÓÐÏòͼÖУ¬ËùÓж¥µãµÄÈë¶ÈÖ®ºÍµÈÓÚËùÓж¥µãµÄ³ö¶ÈÖ®ºÍµÄ£¨ £©±¶¡£ A.1/2 B.1 C.2 D.4 ´ð£ºB £¨3£©ÓÐ8¸ö¶¥µãµÄÎÞÏòͼ×î¶àÓУ¨ £©Ìõ±ß¡£ A.14 B.28 C.56 D.112 ´ð£ºB £¨4£©ÓÐ8¸ö¶¥µãµÄÎÞÏòÁ¬Í¨Í¼×îÉÙÓУ¨ £©Ìõ±ß¡£ A.5 B.6 C.7 D.8 ´ð£ºC £¨5£©ÓÐ8¸ö¶¥µãµÄÓÐÏòÍêȫͼÓУ¨ £©Ìõ±ß¡£