问答题
设某二叉树结点结构为:TYPE bitreptr=^bnodetp;bnodetp=RECORD data:integer; 1child, rchild:bitreptr END;试编写算法,计算每层中结点data域数值大于50的结点个数,并输出这些结点的data域的数值和序号。【北京工业大学1998九(10分)】
【正确答案】正确答案:采用层次遍历,设一队列Q,用front和rear分别指向队头和队尾元素,last指向各层最右结点位置。存放值大于50的结点结构如下: typedef struct{int level,value,idx;}node; //元素所在层号、值和本层中的序号 int front=0,last=1,rear=1,level=1,i=0,num=0; //num记大于50的结点个数 BiTree Q[];Q[1]=bt ; //根结点入队 while(front<=last) {bt=Q[++front]; if(bt一>data>50) {s.level=level; s.idx=++i; s.value=bt一>data; a[++num]=s ;} if(bt一>Ichild!=null)Q[++rear]=bt一>ichild; //左子女入队列 if(bt一>rchild!=null)Q[++rear]=bt一>rchild; //右子女入队列 if(front==last) //本层最后一个结点已处理完 {last=rear; level++;i=0 ;} //初始化下层:last指向下层最右结点 //层号加1,下层>50的序号初始为0 }
【答案解析】