一:完全二叉树中结点问题

分析:

设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2

侧有

n0+n1+n2=n                (1)

对于二叉树有:

n0=n2+1                       (2)

由(1)(2) ==>

n0=(n+1-n1)/2              (3)

由完全二叉树的性质可知:n1=0 或 1

总结:

(a):当n1=0时(即度为1的节点为0个时,此时n为奇数)或者n为奇数时

n0= (n+1)/2;

(b):当n1=1时(即度为1的节点为1个时,此时n为偶数)或者n为偶数

n0= n/2;

综合(a)(b)可得:

(结论):一个具有n个节点的完全二叉树,其叶子节点的个数n0为: n/2 向上取整,或者(n+1)/2 向下取整

首先定义二叉树的度为子节点的个数,因此根据这个概念,节点情况只有0,1,2三种情况,分别用n0,n1,n2表示。 
一个棵树的节点总数=n0+n1+n2 
如图: 
 

当节点数N为奇数时,说明该树结构中没有度为1的节点。 
当节点数为偶数时,说明有一个度为1的节点,如上图情况。 
对于一个非空二叉树,有以下等式成立 
n0=n2+1

举例说明: 
设一棵完全二叉树共有699个节点,则在该二叉树中的叶节点数是什么? 
n=n0+n1+n2 
n0=n2+1 
n=699,奇数,说明n1为0; 
n=n0+n0-1 
n0=350,所以叶节点数为350。

下面看另一个题目:

一颗完全二叉树第六层有8个叶结点(根为第一层),则结点个数最多有()个。

二叉树第k层最多有 2^(k-1) 个节点
第六层最多有32个节点
第五层最多有16个节点
第四层最多有8个节点
第三层最多有4个节点
第二层最多有2个节点 
第一层最多有1个节点

完全二叉树的叶节点只可能出现在后两层

如果完全二叉树有6层,则前5层是满二叉树,总节点数目为16+8+4+2+1+8=39

如果完全二叉树有7层,则前6层是满二叉树,
前六层总节点数目为32+16+8+4+2+1=63
第六层有8个叶子节点,则有32-8=24个非叶子节点
第七层最多有24*2个叶子节点
总节点数目为63+24*2=111

二:树的叶子结点计算方法

在学习树的时候经常会遇到计算树中叶子结点的个数的题,比如现在有这样一道题

已知在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点的个数为?
解决这道题的思路是列出一个关于各个度的结点的等式,从而根据已知条件算出度为0的结点的个数,下面具体说一下解题方法:

设树T中的结点个数为n,度为0的结点的个数为n0,度为1的结点的个数为n1,度为2的结点的个数为n2,度为3的结点的个数为n3,度为4的结点的个数为n4,则有:

n = n0 + n1 + n2 + n3 + n4

设树T中的总边数为e,因为除了根节点的入度为0,其余各节点的入度都为1,则有:

e = n - 1 = n0 + n1 + n2 + n3 + n4 - 1

又因为,n0的出度为0,n1的出度为1,n2的出度为2,n3的出度为3,n4的出度为4,所以:

e = n0 * 0 + n1 * 1+ n2 * 2 + n3 * 3 + n4 * 4

综上所述:

e = n0 * 0 + n1 * 1+ n2 * 2 + n3 * 3 + n4 * 4 = n0 + n1 + n2 + n3 + n4 - 1

n0 = n2 + n3 * 2 + n4 * 3 + 1

根据题意,n2 = 1, n3 = 10 ,n4 = 20 ,代入得:

n0 = 82

因此该树T有82个叶子结点

看完了上面的解题过程,思路应该很清晰明了吧,没懂?没关系,我们再来看一道题

一棵度为3的树中,有3度的结点100个,有2度的结点200个,有叶子结点多少个?
还是和上面一样的解题过程,我稍微简略一点写,思路都是一样的

n = n0 + n1 + n2 + n3

e = n - 1 = n0 + n1 + n2 + n3 - 1

e = n0 * 0 + n1 * 1 + n2 * 2 + n3 * 3

n0 + n1 + n2 + n3 - 1 = n0 * 0 + n1 * 1 + n2 * 2 + n3 * 3

n0 = n2 + n3 * 2 + 1

则叶子结点的个数为401个

树的叶子结点与完全二叉树结点计算方法相关推荐

  1. java语言 写一算法求其叶子数目_数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点。A. n+1B. 2n-1...

    数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点.A. n+1B. 2n-1 数据结构(Java)在线作业 1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树 ...

  2. Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)——无非是在传统遍历过程中修改叶子结点加入后继结点信息(传统是stack记录),然后再删除恢复...

    先看看线索二叉树 n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域.利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索 ...

  3. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  4. PAT甲级1106 Lowest Price in Supply Chain:[C++题解]树、结点到根结点的距离、树形dp、记忆化搜索

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:这道题是第三次做了. 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的 ...

  5. PAT甲级1090 Highest Price in Supply Chain:[C++题解]树、结点到根结点的距离、记忆化搜索、树形dp

    文章目录 题目分析 题目链接 题目分析 来源:acwing 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的距离.树形dp.记忆化搜索是 ...

  6. PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树、结点到根结点的距离、树形dp、记忆化搜索

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:下图是对样例的模拟图示,题目就是统计叶子结点卖出去的钱数.根据下图,我们第一步是建树,第二步是统计叶子结点到根结点的距离,然后才能知道 ...

  7. 求完全二叉树结点个数(leetcode 222)

    力扣 目录 思路 1.递归(看作普通二叉树 求结点个数) 2.利用完全二叉树的特性(位运算+二分法) 思路 1.递归(看作普通二叉树 求结点个数) 递归出口: (1)根节点为空,返回0 (2)根节点的 ...

  8. 终端节点、叶子节点和分支结点和非终端结点区别,数据结构常见误区答疑

    参考严薇敏数据结构(C语言)第二版 非终端结点:度不为0的结点称为非终端结点或分支结点. 终端结点:    度为0的结点称为终端结点或叶子. 另外,各位考研的同学,"结"点,不是节 ...

  9. 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)

    1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...

  10. 输出每个叶子结点到根结点的路径

    输出每个叶子结点到根结点的路径 void RouteToRoot(BitNodes root, stack<int> s) {if (root) {s.push(root->data ...

最新文章

  1. 2022-2028年中国内衣行业研究及前瞻分析报告
  2. Scala入门到精通——第三十节 Scala脚本编程与结束语
  3. c+ +三角函数_C ++中的三角函数
  4. JavaScript字符集编码与解码
  5. How To Deploy OpenShift Container Platform 4.8 on KVM
  6. 3结构介绍_接收机基本结构
  7. CCF201809-4 再卖菜(100分)【DFS】
  8. FL Studio中钢琴卷帘窗的工具的使用
  9. 【公告】个人站点及系列文章
  10. Codeforces Beta Round #61 (Div. 2)
  11. Microsoft SQL Server 2005安装
  12. 通过相关系数和自由度求置信度
  13. 区块链将成为互联网基础协议,类似于TCP/IP、HTTP
  14. 人脸识别最全知识图谱
  15. ERROR: Removing unused resources requires unused code shrinking to be turned on.
  16. 2019支付宝小程序技术专场招募
  17. R语言的版本更新以及迁移R包
  18. Misc训练笔记(一)
  19. goinception审核规则
  20. Winodws 快速添加开机启动项

热门文章

  1. python读取lmdb文件_python中读写LMDB数据库
  2. 【转】从机器学习谈起
  3. 【NOIP2016提高组复赛】蚯蚓 题解
  4. 计算机管理系统在哪里,Win7系统realtek高清晰音频管理器在哪里打开?
  5. abaqus 关联 子程序_Abaqus2016版本关联子程序教程
  6. CactiEZ-优化操作
  7. 2022年最新的西安Java培训机构十大排名榜单
  8. 嵌入式系统之CMSIS学习笔记
  9. 今年赚钱最多的,居然是个牧羊人
  10. 老男孩python全栈视频教程_老男孩Python全栈7期,Flask全套组件及原理剖析视频教程下载...