分析第一步,二叉树根据完整性(即最后一层是否满了)可分为“完整二叉树”和“非完整二叉树”(不知道有没有这个概念,自己定义的),然后从特殊情况开始即“完整二叉树”开始分析。

设二叉树共N层,每层都是满的。那么第一层有1个结点,第二层有1*2个结点,第三层有1*2*2个结点,第N层有2^(N-1)个结点。

一共有1+2+2*2+2^3+2^4+·····+2^(N-1)个结点根据等比数列的求和可以得到结果为(2^N)-1个结点。
由此发现一个神奇的现象,1.完全二叉树个数是奇数个,因为除了顶端哪一个,地下每层都是成对出现的。

总结点数:S = (2^N)-1,最后一层结点数(叶子结点数):2^(N-1)

所以非叶子结点数为2^N-1-2^(N-1) = 2(N-1)-1  正好比最后一层结点(叶子结点)少一个

那么非完整二叉树又如何呢?

非完整二叉树最后一层最少要缺少1个,最多缺少几个呢,我们知道完整二叉树最后一层一共有2^(N-1)个结点,假设非完整二叉树最后一层少了2^(N-1)个结点,那么他就是完整二叉树,层数是N-1,所以最后一层不能少2^(N-1)个,所以最多缺少2^(N-1)-1个也就是最后一层只剩下一个结点了。

假设非完整二叉树少了M个结点,那么M>=1并且M<=2^(N-1)-1

那么他的叶子结点和非叶子结点各是多少呢?这里有个误区,你可能认为叶子节点就是最后一层的结点个数,错!,第二层右边的部分结点也可能是叶子结点,只要他地下没有结点链接了就是叶子结点!比如下图红色部分都是叶子结点

那么第二层究竟有多少叶子结点呢?

我们知道一个结点下面最多有两个结点,那么,非完整树下面缺少M个节点造就了多少个叶子节点呢?

M=1,造就了0个,如下图

M=2,造就了1个叶子节点,如下图

依次类推,假设M是偶数,那么创造了M/2个叶子节点,如果M是奇数,那么创造了(M-1)/2个叶子节点。
相对应的非叶子节点就少了M/2个或者少了(M-1)/2个。

假设新转换的叶子节点个数是T,那么
叶子节点数为原本有的2^(N-1)个少了M个,多了T个,就是2^(N-1)-M+T个,且T = M/2或者T = (M-1)/2

整颗树的结点有完全数的(2^N)-1个减去少了的M个,就是(2^N)-1-M个
非叶子结点个数就是两者差即:(2^N)-1-M-[2^(N-1)-M+T]=2^(N-1)-1-T

数学不好的看这里:(2^N)-1-M-[2^(N-1)-M+T] 展开括号得到 (2^N)-1-M-2^(N-1)+M-T
      然后M消掉得到(2^N)-1-2^(N-1)-T   然后2^N可以转化为2*2^(N-1)  得到  2*2^(N-1)-2^(N-1)-1-T

最后得到2^(N-1)-1-T

叶子结点与非叶子结点的差=2^(N-1)-M+T - [(2^N-1)-1-T] = 2*T-M+1

当M为偶数的时候,T=M/2   上述差值为1

当M为奇数时,T = (M-1)/2 上述差值为 0

所以叶子结点和非叶子结点对半分,叶子结点最多多一个

二叉树探究之非叶子结点和叶子结点对半分且最多差一个相关推荐

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

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

  2. 树的度,结点,叶子结点,二叉树

    设树T的度为4,其中度为1.2.3.4的结点个数分别为4.2.1.1.则T中有多少个叶子结点? A.4 B.6 C.8 D.10 一棵含有n个结点的树,有n-1个分支,即 n = 14 + 22 + ...

  3. 求二叉树中从根结点到叶子结点的路径

    /** *    实验题目: *        求二叉树中从根结点到叶子结点的路径 *    实验目的: *        掌握二叉树遍历算法的应用,熟练使用先序.中序.后序3种递归 *    和非递 ...

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

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

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

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

  6. 叶子结点和分支节点_数据结构中,满二叉树,结点,叶子节点,是什么?

    除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树. 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树.也就是说,如果一个二叉树的层数为K,且结点总数 ...

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

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

  8. 计算二叉树的第k层中所有叶子结点个数

    计算二叉树的第k层中所有叶子结点个数 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 二叉链表表示的二叉树:按先序次序输入二叉树中结点 ...

  9. 叶子结点和分支节点_二叉树中的度是什么意思,叶子结点是什么?

    展开全部 度分为三32313133353236313431303231363533e4b893e5b19e31333431366366种:树的深度:树中最大的结点层.结点的度:结点子树的个数.树的度: ...

最新文章

  1. ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
  2. qt mysql读写_QT读写Sqlite数据库
  3. C#:ref和out的联系及区别。
  4. android webview 图表,Android WebView 无法正常显示网页图表
  5. linux常用命令(精)
  6. Go语言---并发编程goroutine
  7. 使用Oracle 10g的Logminer挖掘日志
  8. 软件测试报告模板怎么写,这篇文章告诉你
  9. WPS Office 2019 For Linux 设置显示语言
  10. 预应力钢筒混凝土管(PCCP)行业发展现状及竞争格局分析报告2022-2027年版
  11. C# amr转mp3 (ffmpeg)
  12. MYSQL统计收益排名
  13. Latex algorithm Input Output
  14. Javase 第五次作业智商题
  15. UE角色以及角色动画超详细流程干货!这次是step by step!
  16. Unity3D之调用WinRT组件
  17. 联想thinkbook14 2022款和2021款区别哪个好
  18. 群论基础速成(6):五大著名群族
  19. java判断字符串以数字开头_java-如何检查以数字开头的字符串?
  20. 今天公开猎头顾问业绩过百万的秘密,谷露猎头系统3.0版谍报速递

热门文章

  1. css 设置背景图一半_img只显示图片一部分 或 css设置背景图片只显示图片指定区域...
  2. Vimeo视频下载工具
  3. 【学术】我读科学网“马臻”老师博客体会
  4. java七行情书_七行情书
  5. SQL中DATEADD和DATEDIFF的使用方法
  6. Smarty - 手册 - 第8章 自定义函数 - {cycle}循环
  7. 迷宫求解【穷举求解法】
  8. 第二次作业-产品分析
  9. 怎么对比两个mysql数据库_[实战]如何对比两个数据库之间的变化
  10. 电脑调整分区后分区不见恢复数据的方法