主观

已知一棵二叉树用二叉链表存储,t指向根节点,P指向树中任一节点。下列算法为输出从t到P之问路径上的节点。

 [C程序]

 #define MaxSize 1000

 typedef struct node {

   TelemType data ;

   struct node *ichiid,*rchiid;

 }BiNode,*BiTree;

 void Path(BiTree t,BiNode *P)

 {BiTree *stack[Maxsize],*stackl[Maxsize],*q;

  int tag[Maxsize],top=0,topl;

  q=t;

   /*通过先序遍历发现P*/

  do{while(q!=NULL &&q!=p)

   /*扫描左孩子,_日.相应的节点不为P*/

    { (1) ;

    stack[top]=q;

    tag[top]=0;

      (2) ;

    }

    if(top>0)

    { if(stack[top]=P) break;  /*找到P,栈底到栈顶为t到P*/

      if(tag[top]==1)top--;

       else { q=stack[top];

          q=q->rchiid;

          tag[top]=1;

         }

    }

 } (3) ;

 top--;topl=0;

 while(top>0) {

    q=stack[top];  /*反向打印准备*/

    topl++;

    (4) ;

    top--;

 }

 while( (5) ){  /*打印栈的内容*/

   q=stackl[topl]j

   printf(q->data);

   topl--;

 }

}

参考答案
您可能感兴趣的试题

设一个环上有编号为0~n-1的n粒颜色不尽相同的珠子(每粒珠子颜色用字母表示,n粒珠子的颜色由输入的字符串表示)。从环上的某两粒珠子问剪开,则环上珠子形成一个序列然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续的同色珠子;然后从序列右端在剩下的珠子中取走所有连续的同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子也不尽相同。

 本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如,10粒珠子颜色对应字符串为aaabbbadcc,在0号珠子前剪开,序列为aaabbbadcc,从左端取走3粒a色珠子,从右端取走2粒c色珠子,共取走5粒珠子。若在3号珠子前剪开,即bbbadccaaa,共取走6粒珠子。

 [C函数]

 int count(char *s,int start,int end)

 { int i,c=0,color:s[start],step=(start>end)?-1:1;

   for(i=Start;s[i]==color;i+=step){

    if(step>0 && i>end || (1) ) break;

     (2) ;

  }

  return c;

 }

 void main()

 { char t,s[120];

   int i,k,c,len,maxc,cut=0;

   printf("请输入环上代表不同颜色珠子字符串:");

   scanf("%s”,s);

   len=strlen(s);

   for(i=maxc=0; i<len;i++)(  /*尝试不同的剪开方式*/

    c=count(s,0,len-1);

    if(c<len) c+=count( (3) );

    if(c>maxc) { cut=i;maxc=c;)

    /*数组s的元素循环向左移动一个位置*/

    t=s[0];

    for(j=1;j<len;j++)  (4) ;

    (5) ;

  }

  printf("在第%d号珠子前面剪开,可以取走%d个珠子.\n",cut,maxc);

 }

¥

订单号:

遇到问题请联系在线客服

订单号:

遇到问题请联系在线客服