问答题 一棵二叉树以二叉链表来表示,求其指定的某一层k(k>1)上的叶予结点的个数。【上海大学1999年】
【正确答案】正确答案:算法的基本设计思想:采用队列结构按层次遍历,遍历K层时记录叶子结点个数。算法的代码: int LeafKlevel(BiTree bt,int k){ //求二叉树bt的第k(k>1)层上叶子结点个数 if(bt==NULL 1 I k<1) retUrn 0; BiTree p=bt,Q[]; //Q是队列,元素是二叉树结点指针,容量足够大 int front=0,rear=1,1eaf=0 ; //front和rear是队头和队尾指针,leaf是叶子结点数 int 1ast=1,1evel=1 ; //1ast是二叉树同层最右结点的指针,level是二叉树的层数 Q[1]=p; while(front<=rear) { P=Q[+十front]; if(1evel。=k&&!P一>ichild&&!p->rchild) 1ear++; //叶子结点 if(p一>1chiid) Q[++rear]:p一>lchiid, //左子女入队 if(p一>rchiid) Q[++rear]=p一>rchiid; //右子女入队 if(front==last) { level++; //二叉树同层最右结点已处理,层数增1 last=rear; //last移到指向下层最右一元素 } if(1evel>k) //层数大于k后退出运行 return leaf; }//while }//LeafKLevel
【答案解析】