问答题
一棵二叉树以二叉链表来表示,求其指定的某一层k(k>1)上的叶子结点的个数。【上海大学1999三、1(18分)】
【正确答案】正确答案:对某层上的结点进行运算,采用队列结构按层次遍历最适宜。核心语句段如下: BiTree P=bt,Q[]; //Q是队列,元素是二叉树结点指针,容量足够大 int front:0,rear:1,leaf:0; //front和rear是队头和队尾指针,leaf是叶子结点数 int last:1,level=1;Q[1]=P; //last是同层最右结点的指针,level是二叉树的层数 while(front<=rear) (p=Q[++front]; if(1evel:=k&&!p一>Ichild&&!p一>rchild)leaf++; //叶子结点 if(p一>ichild)Q[++rear]-p一>Ichild; //左子女入队 if(p一>rchild)Q[++rear]-p一>rchild; //右子女入队 if(front==last)flevel++;last:rear; //同层最右结点已处理,层数增1 } //last移到指向下层最右一元素 if(1evel>k)return(1eaf); //层数大于k后退出运行 }//while return 0;//k大于二叉树的高度
【答案解析】