填空题

下面分别是用类程序设计语言和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  { ();
                     s<-s+1;   
                   }
            preorderl(bt^.llink,c,d,s);
            ()
            }
     }
  algorithm revisel(bt)
    //bt为指向二叉树根结点的指针
    //c,d为字符型
    //is为整型
  {
    write(’c=’);();
    write(’d=’);readln(d);
    ();
    preorder1(bt,c,d,s);
    writeln(’s=’,s)
  }
    回答以下问题:
    (17)preorder1算法中,语句s<-s+1的作用是()。
    (18)设先序遍历bt所指向二叉树的结点序列为:ABDFECH;中序遍历bt所指向二叉树的结点序列为:DBFEACH;若c=’D’、d=’G’,则执行上述算法程序后,后序遍历bt所指向二叉树的结点序列的第一个结点是()。
    (19)上述算法中,先序遍历过程preorder1是否可以改为后序遍历过程 ()(是或否)。
②c++语言描述形式符号&开头的参数为引用参数。bt指向二叉树结点的数据域用bt->data表示,指向左、右孩子的指针域分别用bt->llink、bt->rlink表示。
  algorithm preorder2(bt,c,d,&s)
    //bt为指向二叉树根结点的指针
    //c,d为字符型
    //s为整型
    {
    if(bt){
       if(bt->data==c){
        ();
       ++s;
       }
       preorder2(bt->llink,c,d,s);
       ();
    }
  }
  algorithm revise2(bt)
    //bt为指向二叉树根结点的指针
    //c,d为字符型
    //s为整型
  {
    cout<<"c=";();
    cout<<"d=";cin>>d;
    ();
    preorder2(bt,c,d,s);
    cout<<"s="<<s<<’\n’;
  }
  回答以下问题:
  (24)preorder2算法中,语句++s的作用是() 。
  (25)设先序遍历bt所指向二叉树的结点序列为:ABDFECH;中序遍历bt所指向二叉树的结点序列为:DBFEACH;若c=’D’、d=’G’,则执行上述算法程序后,后序遍历bt所指向二叉树的结点序列的第一个结点是()。
    (26)上述算法中,先序遍历过程preorder2是否可以改为后序遍历过程 ()(是或否)。
 

【参考答案】

①bt^.data=d;preorderA(bt^.rlink,c,d,s);read(c);s<-0;累加修改的结点个......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)