填空题 下面分别是用类程序设计语言和c++语言描述的算法preorder1(由算法revisel调用)和preorder2(由算法revise2调用),其功能是通过二叉树的先序遍历,将二叉树中数据域值等于c的结点修改为数据域值d,并累加修改的结点个数s。 二叉树结点如图2所示,其中,数据域data为字符型,llink、rlink分别为指向左、右孩子的指针域。 请选择一种算法描述形式,在算法中的空格处填入正确内容并回答问题(①、②任选一题,只能选做一题)。 ①类程序设计语言描述形式符号&开头的参数为引用参数(即输入输出参数)。bt指向二叉树结点的数据域用bt^.data表示,指向左、右孩子的指针域分别用bt^.llink、bt^.rlink表示。算法中,"<-"为赋值号,nil为空指针。 algorithm preorder1(bt,c,d,&s) //bt为指向二叉树根结点的指针// //c,d为字符型// //s为整型// { if bt<>nil then{if bt^.data=c then { 1(13) 2; s<-s+1; } preorderl(bt^.llink,c,d,s); 3(14) 4 } } algorithm revisel(bt) //bt为指向二叉树根结点的指针 //c,d为字符型 //is为整型 { write('c='); 5(15) 6; write('d=');readln(d); 7(16) 8; preorder1(bt,c,d,s); writeln('s=',s) } 回答以下问题: (17)preorder1算法中,语句s<-s+1的作用是 9(17) 10 。 (18)设先序遍历bt所指向二叉树的结点序列为:ABDFECH;中序遍历bt所指向二叉树的结点序列为:DBFEACH;若c='D'、d='G',则执行上述算法程序后,后序遍历bt所指向二叉树的结点序列的第一个结点是 11(18) 12 。 (19)上述算法中,先序遍历过程preorder1是否可以改为后序遍历过程 13(19) 14(是或否)。 ②c++语言描述形式符号&开头的参数为引用参数。bt指向二叉树结点的数据域用bt->data表示,指向左、右孩子的指针域分别用bt->llink、bt->rlink表示。 algorithm preorder2(bt,c,d,&s) //bt为指向二叉树根结点的指针 //c,d为字符型 //s为整型 { if(bt){ if(bt->data==c){ 15(20) 16; ++s; } preorder2(bt->llink,c,d,s); 17(21) 18; } } algorithm revise2(bt) //bt为指向二叉树根结点的指针 //c,d为字符型 //s为整型 { cout<<"c="; 19(22) 20; cout<<"d=";cin>>d; 21(23) 22; preorder2(bt,c,d,s); cout<<"s="<23(24) 24 。 (25)设先序遍历bt所指向二叉树的结点序列为:ABDFECH;中序遍历bt所指向二叉树的结点序列为:DBFEACH;若c='D'、d='G',则执行上述算法程序后,后序遍历bt所指向二叉树的结点序列的第一个结点是 25(25) 26 。 (26)上述算法中,先序遍历过程preorder2是否可以改为后序遍历过程 27(26) 28(是或否)。
  • 1、
【正确答案】 1、①(13)bt^.data=d (14)preorder1(bt^.rlink,c,d,s) (15)read(c) (16)s<-0 (17)累加修改的结点个数 (18)G (19)是 ②(20)bt->data=d。 (21)preorder2(bt->rlink,c,d,s) (22)cin>>C (23)s=0 (24)累加修改的结点个数 (25)G (26)是    
【答案解析】