设计一个算法,求非空二叉树中指定的第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 ...
随机推荐
- XMLHTTP请求的当前状态
readyState,此属性只读,状态用长度为4的整型表示.定义如下: 0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法) 1 (初始化) 对象已建立,尚未调用send方法 2 (发 ...
- 使用date转换UNIX时间戳
1.将time string转换成时间戳 date -d "2010-10-12 12:25:00" +%s 2.将时间戳转换成time string date -d " ...
- Sass@规则
@importSass 支持所有 CSS3 的 @ 规则, 以及一些 Sass 专属的规则,也被称为“指令(directives)”.Sass 扩展了 CSS 的 @import 规则,让它能够引入 ...
- 单例模式(Singleton)详解——转载
单例模式(Singleton) 首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了, 比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个, 这里就可以通过 ...
- lambda语法
(参数列表) => 表达式或者语句块 s => (s.IndexOf("a") > -1 其中:参数个数:可以有多个参数,一个参数,或者无参数.表达式或者语句块: ...
- MVC 路由Router
Url路由将进入的请求发送给控制器操作. url路由使用路由表处理进入的请求 此路由表在应用程序第一次启动时创建. 路由表在Global.asax文件中设置
- C#读取XML配置文件
DataSource.xml文件,要放在bin/debug/目录下: <?xml version="1.0" encoding="utf-8" ?> ...
- .net 2.0中半角全角错误的解决办法
VS2005中.net 2.0编译报错如下所示:'System.Windows.Forms.ImeMode' does not contain a definition for 'OnHalf'.只需 ...
- Cocos2d-x 3.x部署到安卓
一.前期准备 下载下列软件: Python2.7 (https://www.python.org/downloads/) Cocos2d-x 3.x (http://www.cocos2d-x.org ...
- redis的特色
总结一下redis的特点: 1.独特的键值对模型 很多数据库只能处理一种数据结构: • SQL 数据库 —— 表格 • Memcached —— 键值对数据库,键和值都是字符串 ...