设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数
思想:採用基于层序遍历的方法。
用level扫描各层节点,若某一层的节点出队后。rear指向该层中最右节点。则将rear赋值给last(对于第一层。last=1).在出队时,若front=last,表示这一层处理完成,让层号level增1,并置last为下一层最右节点。那么怎样求一层的最右节点呢?这是由于第一层仅仅有一个节点,它就是最右节点。对于其它层。上一层最右节点最后进队的孩子一定是该层的最右节点。
比如,对于如图所看到的的二叉树。求k=3的叶子节点个数的步骤例如以下:level=1;A进队时rear=1,last=rear=1,出队front=1,再将B和C进队,此时rear=3,因为last=front成立,表示处理下一层。让last=rear=3,level=level+1=2;
出队front=2即B节点。将D和E进队,出队front=3即C节点。将F进队,此时rear=6,因为front=rear成立,表示处理下一层。让last=rear=6,level=level+1=3;出队D(front=4),level=k且D为叶子节点,则leaf=leaf+1=1,出队E(front=5),level=k且E为叶子节点。则leaf=leaf+1=2,出队F(front=6),level=k且F为叶子节点,则leaf=leaf+1=3,因为front=last成立。表示处理下一层,让last=rear=6(没有新节点进队),level=level+1=4;level>k,返回leaf=3.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="left" alt="">
相应的算法例如以下:
int LeafKLevel(BTNode *b,int k)
{
BTNode *Qu[MaxSize];//定义循环队列
int front, rear;//定义队首、队尾指针
int leaf=0;//leaf累计叶子节点个数
int last;//定义当前层中最右节点在队列中的位置
int level;//定义当前节点的层号
front=rear=0;//置队列为空队列
if(b==NULL||k<=1)
return 0;
rear=(rear+1)%MaxSize;//节点指针进队
Qu[rear]=b;
last=rear;level=1;//第一层的最右节点在队列中的位置为1
while(front!=rear)//队列不为空时循环
{
front=(front+1)%MaxSize;
b=Qu[front];//队头出队
if(level==k&&b->lchild==NULL&&b->rchild==NULL)
leaf++;//若*b为level层叶子节点。则递增1
if(b->lchild!=NULL)//左孩子进队
{
rear=(rear+1)%MaxSize;
Qu[rear]=b->lchild;
}
if(b->rchild!=NULL)//右孩子进队
{
rear=(rear+1)%MaxSize;
Qu[rear]=b->rchild;
}
if(front==last)//同层最右节点处理完成,层数增1
{
level++;
last=rear;//让last指向下一层的最右节点在队列中的位置
}
if(level>k)//当层号大于k时返回leaf,不再继续
return leaf;
}
}
对于如图所看到的的二叉树,求各层叶子节点个数结果如图所看到的:
二叉树:A(B(D(,G)),C(E,F))
第1层叶子节点的个数=0
第2层叶子节点的个数=0
第3层叶子节点的个数=3
设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数的更多相关文章
- 有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成。
有一个线性表,采用带头结点的单链表L来存储,设计一个算法将其逆置,且不能建立新节点,只能通过表中已有的节点的重新组合来完成. 分析:线性表中关于逆序的问题,就是用建立链表的头插法.而本题要求不能建立新 ...
- 非空二叉树的一个有趣的性质:n0 = n2 + 1
对任何非空二叉树T,若n0 表示叶结点的个数.n2 表示度为2 的非叶结点的个数,那么两者满足关系n0 = n2 + 1. 这个性质很有意思,下面我们来证明它. 证明:首先,假设该二叉树有N 个节点, ...
- 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称
转载请注明出处:http://blog.csdn.net/u012860063 问题:设单链表中存放n个字符.试设计一个算法,使用栈推断该字符串是否中心对称,如xyzzyx即为中心对称字符串. 代码例 ...
- python学习:设计一个算法将缺失的数字找出来。
算法题 已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...
- 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- 求二叉树第K层的节点个数+求二叉树叶子节点的个数
size_t _FindLeafSize(Node* root) //求二叉树叶子节点的个数 { //static size_t count = 0; if ...
- 一个解决在非UI线程中访问UI 异常的小方法
写 WPF 的童鞋可能都会碰到 在非UI线程中访问 UI 异常的问题.这是为了防止数据不一致做的安全限制. 子线程中更新UI还要交给主线程更新,引用满天飞,实在是麻烦. 接下来,我们推出一个可以称之为 ...
- 设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)
思想:图G是不带权的无向连通图.一条边的长度计为1,因此,求带顶点u和顶点v的最短的路径即求顶点u和顶点v的边数最少的顶点序列.利用广度优先遍历算法,从u出发进行广度遍历,类似于从顶点u出发一层一层地 ...
- 数据结构作业——P53算法设计题(6):设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点
思路: 设单链表首个元素为最大值max 通过遍历元素,与最大值max作比较,将较大值附给max 输出最大值max 算法: /* *title:P53页程序设计第6题 *writer:weiyuexin ...
随机推荐
- IT痴汉的工作现状25-技术之养成
要想成为技术大牛,除了天赋以外,更与后天的刻苦努力分不开.伟仔我天生愚顿.工作多年后仍与大牛相差甚远,更加觉得技术的养成是一个异常困难的过程. 是我不用功吗?我不这样觉得.伟仔尽管是个懒人,但对于技术 ...
- samba常用命令
1.# smbstatusSamba version 3.6.23PID Username Group Machine ---------------------------------------- ...
- TableView数据源方法的执行顺序
UITableView显示数据的过程 1.调用一次tableView:numberOfRowsInSection:方法确定行数 2.调用多次tableView:heightForRowAtIndexP ...
- <.net>委托初探
最近在学<.net深入体验与实战精要>. 今天就来初步讲解下委托. 一句话:委托定义了方法类型,可以将方法当做另一个方法的参数进行传递.委托包涵的只是方法的地址,而不是数据.类似于c指针. ...
- MySql 事务+异常处理+异常抛出
-- 测试用表 -- innodb 支持事务 CREATE TABLE `tb_test` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, P ...
- 原生js获取body
1. doucumnet.body 2. document.getElementsByTagName("body")[0]
- Sass函数--颜色函数--Opacity函数
Opacity函数简介 在 CSS 中除了可以使用 rgba.hsla 和 transform 来控制颜色透明度之外,还可以使用 opacity 来控制,只不过前两者只是针对颜色上的透明通道做处理,而 ...
- (转)SQL语句中的N'xxxx'是什么意思
SQL语句中的N'xxxx'是什么意思 我们在一些sql存储过程,触发器等中经常会见到类似 N'xxxx' 是什么意思? 例如:if exists (select * from dbo.sysobje ...
- js 计算两个日期之间的周数
//返回两个日期相差的周数 function WeeksBetw(date1, date2) { //这里的date1,date2都是Date对象 var d1 = new Date(date1); ...
- arry()数组的理解及api的使用(二)
注意:本文都来自于w3school中文网,如果需要完整版请去--http://www.w3school.com.cn/jsref/jsref_obj_array.asp 1.1 slice() 方法- ...