树与二叉树——二叉树中计算叶子结点个数问题
1、已知完全二叉树具有967个结点,则其叶子结点个数为:
详解:
首先明确一点该二叉树是一棵二叉树,那可以使用二叉树的一些性质。
从第一层开始计算每层的节点个数:1,2,4,8,16,32,64,128,256,512,1024...
将前9层的结点数量全部加起来有511个,如果加上第十层1024,则超过967,所以该完全二叉树肯定是有十层的,所以叶子结点分布在第9层和第10层,且第10层全部都是叶子结点。
设第9层的叶子个数为b,第9层的分支结点个数为a;
由于是完全二叉树,又该树有10层,所以第9层肯定有2^(9-1) = 256个结点,则有关系式:
a + b = 256 ---------------(1)
又第9层的分支结点个数为a,那么第10层的叶子个数为2*a, 或者2*a-1 个,对于这两种情况,可以根据总的结点个数来确定,因为967是一个奇数,又第1层根节点只有一个,总的结点个数减去1,则为966,是一个偶数,所以第10层的叶子个数肯定为2*a个。
已知前9层共有1+2+4+8+16+32+64+128+256 = 511个结点,第10层有2*a个结点,所以结点总数为前9层的总数加上第10层的个数,则有关系式:
2*a + 511 = 967 ---------------(2)
结合关系式(1)(2),可解得a = 228, b = 28,
叶子结点总数为第9层的叶子数加上第10层的叶子数:b + 2*a = 28 + 2 * 228 = 484。
2、在一棵度为4的树T中,如有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T中的叶子结点个数为:
解:设结点总数为n,叶子结点个数为m。
则结点总数: n = 20 + 10 + 1 + 10 + m ---------------(1)
还有一个关系式是关于结点总数和总度数的。
假如将“度”理解为一根绳子,对于每一棵树,我们都很清楚,每一个结点都是由一个度牵引着的,除了根节点这个特殊结点没有被度牵引。所以,总结点数是总的度数加上根节点的数目,而根节点只有一个,所以总结点数 = 总的度数 + 1,由此,可以得到下面的结点总数和度总数的关系式:
n = 20*4 + 10*3 + 1*2 + 10*1 + m*0 + 1 ---------------(2)
联合关系式(1)(2),可解得m = 82。
3、一棵度为3的树中,有3度结点100个,有2度结点200个,则叶子结点个数为:
解:虽然这棵树不是二叉树,但是有些性质也是适用的。其中,最重要的一个性质是结点总数和总度数的关系。
设1度结点共有a个,叶子结点共有b个,总的结点个数为n,则有以下关系式:
n = 100 + 200 + a + b
n = 3 * 100 + 2 * 200 + 1 * a + 0 * b + 1
联合以上两个关系式可以解得 b = 401,即叶子个数为401个。
总结:
大部分关于二叉树的计算问题,只要仅仅抓住二叉树和树的性质,基本上都能很快解决。
所以对于二叉树的性质要非常熟悉,不仅仅要知道性质的内容,也要知道性质的推倒过程。
树与二叉树——二叉树中计算叶子结点个数问题相关推荐
- 计算二叉树的第k层中所有叶子结点个数
计算二叉树的第k层中所有叶子结点个数 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 二叉链表表示的二叉树:按先序次序输入二叉树中结点 ...
- 【数据结构】——二叉树的创建、计算叶子结点个数、递归遍历
前面我们讲了关于数据结构中的堆栈问题,这篇文章主要是为大家简要介绍一下二叉树,并实现二叉树的创建.计算叶子结点个数.递归遍历.判断是否是完全二叉树等相关问题~ 一.二叉树的介绍 1.什么是二叉树 一棵 ...
- 树:求二叉树的高度和叶子结点数量
算法代码很简单都是用使用递归计算,大家把递归思想领悟到就ok了. 二叉树高度算法 //求二叉树的高度 采用递归的方式 void GetHeight(BiTree tree, int* heightNu ...
- 统计孩子兄弟表示法森林中叶子结点个数
算法思路 孩子兄弟表示法,即二叉树中,结点A的左指针代表A的孩子结点,A的右指针代表A的兄弟结点,当A为根结点时,则A的右指针表示另一棵树中的根结点,此时二叉树表示为森林.叶子结点的定义为:度为0的结 ...
- 入门二叉树,三种遍历,计算结点个数 ,深度 叶子结点个数,第k层结点个数
1.关于二叉树的前中后序快速排序 那就在这里拿这张图来演示一下怎样快速写出中序遍历,我们都知道中序遍历是,左子树,根,右子树 B A C D E F H 最后直接得出结果DBEHACF 2.二叉树的五 ...
- 计算二叉树的深度和叶子结点数(递归算法实现)
[问题描述] 计算二叉树的深度和叶子结点数 [输入形式] 输入二叉树的先序遍历序列建立二叉树. [输出形式] 输出二叉树的叶子结点数和深度. [样例输入] A B C # # # # [样例输出] L ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...
- 统计二叉树中叶子结点数数据结构C语言,统计二叉树中叶子结点个数的问题,
#include #include typedef struct Node { int data; struct Node *LChild; struct Node *RChild; }BiTNode ...
- java 树最大距离_寻找二叉树最远的叶子结点(实例讲解)
面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离? 第一反应肯定是递归 如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离呢?采用一个List保持从 ...
最新文章
- android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
- linux alpine 用dockerfile创建的ssh镜像
- JDK13 GA发布:5大特性解读
- PTA第二个编程题总结
- [机械]“重工业面临两大危机”——向文波(三一重工股份有限公司执行总裁)
- 猎豹浏览器插件无法加载怎么办 插件无法加载解决方法
- Luogu P1197 [JSOI2008]星球大战
- [学习笔记]--ASP.Net MVC
- Centos 6.5安装python3.5.1
- Linux下定时切割nginx日志并删除指定天数前的日志记录
- JDK与API下载与使用
- RDP报表工具数据字典配置及使用说明
- Linux线程-概念和控制
- 巴塞尔iii_巴塞尔协议——银行风控实施的超级系统工程 之二
- Roaring64NavigableMap(Bitmap)简单使用
- 可口可乐市场调查失败的原因_经典案例可口可乐一次市场调研失败的教训
- LeetCode——Symmetric Tree
- android标签云:LabelView
- 教你制作手机电子书android应用
- 图像超分中的深度学习网络