填空题

阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
已知一棵二叉树用二叉链表存储,t指向根结点,p指向树中任一结点。下列算法为输出从t到P之间路径上的结点。
[C程序]
#define Maxsize 1000
typedef struct node
TelemType data;
struct node*1child,*rchild;
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--;
elseq=stack[top];
q=q->rchild;
tag[top]=1;

(3) ;
top--; topl=0;
while(top>0)
q=stack[top]; /*反向打印准备*/
topl++;
(4) ;
top--;
while( (5) ) /*打印栈的内容*/
q=stackl[topl];
printf(q->data);
topl--;

【参考答案】

top++ (2) q=q->1child (3) while(top>0) (4) stackl[top1]=q......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

填空题
阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。 [说明] 某银行共发出M张储蓄卡,每张储蓄卡拥有唯一的卡号,每天每张储蓄卡至多支持储蓄卡持有者的N笔“存款”或“取款”业务。程序中用数组card[M][N+3]中的每一行存放一张储蓄卡的有关信息,其中: card[i][0]存放第i张卡的卡号; card[i][1]存放第i张卡的余额; card[i][2]存放第i张卡的当日业务实际发生笔数; card[i][3]~card[i][N+2]存放第i张卡的当日存取款金额,正值代表存款,负值代表取款。 当持卡者输入正确的卡号、存款或取款金额后,程序进行相应的处理;若输入不正确的数据,程序会提示持卡者重新输入;若输入的卡号为负数时,银行终止该卡的当日业务。 [C程序] #include<stdio.H> #define M 6 #define N 5 long card[M][N+3]=9801,2000,0,,9812,2000,2,,9753,3000,1,, 8750,500,0,,9604,2800,3,),(8901,5000,5,; int locate(long card[][N+3],int m,long no) int i; for(i=0;i<m;i++) if( (1) ==no) return i; (2) ; main() long cardNo,money; int k; while(1) printf( 请输入卡号: n ); scanf( %1d ,&cardNo); if(cardNo<0) break; k=locate(card,M,cardNo); if(k==-1) printf( 不存在%id号的储蓄卡 n ,cardNo); continue; printf( 请输入金额(正值代表存款,负值代表取款): n ); scanf( %id ,&money); if(card[k][1]+money<0) printf( 存款余额不足,不能完成本次的取款业务 n ); continue; if(card[k][2]==N) printf( 已完成本卡的当日业务 n ); continue; *处理一笔业务的数据* card[k] (3) =money; (4) ; (5) ;