一棵二叉树以二叉链表来表示 求其指定的某一层k(k>1)上的叶予结点的个数。

大学 结点,个数,表示 已帮助 人

一棵二叉树以二叉链表来表示,求其指定的某一层k(k>1)上的叶予结点的个数。

请帮忙给出正确答案和分析,谢谢!

热搜:二叉排序树的查找效率与二叉树的树形有关

答案解析

难度★★☆ 搜索
  • 正确答案:算法的基本设计思想:采用队列结构按层次遍历遍历K层时记录叶子结点个数。算法的代码: int LeafKlevel(BiTree btint k){ //求二叉树bt的第k(k>1)层上叶子结点个数 if(bt==NULL 1 I k1 retUrn 0; BiTree p=btQ[]; //Q是队列元素是二叉树结点指针容量足够大 int front=0rear=11eaf=0 ; //front和rear是队头和队尾指针leaf是叶子结点数 int 1ast=11evel=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
    算法的基本设计思想:采用队列结构按层次遍历,遍历K层时记录叶子结点个数。算法的代码:intLeafKlevel(BiTreebt,intk){//求二叉树bt的第k(k>1)层上叶子结点个数if(bt==NULL1Ik1retUrn0;BiTreep=bt,Q[];//Q是队列,元素是二叉树结点指针,容量足够大intfront=0,rear=1,1eaf=0;//front和rear是队头和队尾指针,leaf是叶子结点数int1ast=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++;//二叉树同层最右结点已处理,层数增1last=rear;//last移到指向下层最右一元素}if(1evel>k)//层数大于k后退出运行returnleaf;}//while}//LeafKLevel