引言

二叉树在使用链式存储时,每一个结点都有两个指针,或者为空或者指向子结点。

二叉树所有空指针的个数为n+1是众所周知的事(n为二叉树结点个数),虽然不论哪种证明方法都仅仅是恒等式变形的结果,但去分析等式两边的意义是十分有助于理解关系本质的。

几种理解

1.以节点数为切入点

空指针数=1x度为1的结点数+2x度为0的结点数,再列出总节点数的两个等式,可以列出方程组并解出:

这样的作法并不是很直观,它是根据空指针数的产生来源直接列出未知数的表达式,然后根据足够数量的方程组数学上解出所需解。

2.以指针数为切入点

进一步思考树的数据结构,每个结点有两个指针,指针如果不为空,则对应指向一个儿子结点(或理解为关联一条到儿子结点的边)

故空指针数也可以视为总指针数(2n)减去非空的指针数(即边数,n-1),即

3.以递推方式动态理解

我们假设已经有了一颗树,其空指针数为ans,在其上添加结点以观察ans的动态变化情况。

将新的结点a连接到树上结点b,显然b的空指针数会减1,而a的两个指针都是空的,所以它会使树的空指针数加2,则综合a和b对ans的影响,树上添加一个结点后,可以得到一个递推式:

递推的条件是结点数的增加,故考虑初始条件,当树结点数为1,空指针数为2(或树空时,空指针数为1),则:

4.待补充

二叉树空指针个数的理解相关推荐

  1. 【二叉树】先序序列为a,b,c,d 的不同二叉树的个数

    [二叉树]先序序列为a,b,c,d 的不同二叉树的个数 rosefunR 2019-07-23 10:56:40  8639  收藏 17 分类专栏: LeetCode 版权 1.问题 先序序列(前序 ...

  2. 统计表达式二叉树操作数个数

    统计表达式二叉树操作数个数 (10分) 本题要求实现一个函数,统计二叉树表示的表达式中操作数的个数. 函数接口定义: int OperandCount ( BiTree T); T是二叉树树根指针,函 ...

  3. [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数

    leetcode官方的题解:https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha ...

  4. 【数据结构】基于二叉链表的二叉树结点个数的统计

    基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...

  5. 6-2 统计二叉树结点个数 (10分)_数据结构实验5_羊卓的杨

    6-2 统计二叉树结点个数 (10分) 本题要求实现一个函数,可统计二叉树的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCount ...

  6. 二叉树节点个数,叶子个数,第K层个数,最低公共节点

    1. 节点个数 function getNodeNum(root){if(root == null){return 0;}//+1为root的计数return getNodeNum(root.left ...

  7. 求二叉树节点个数、叶子节点、节点层次与宽度

    需实现:(1)输出二叉树b的节点个数 (2)输出二叉树b的叶子节点个数 (3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次. (4)利用层次遍历求二叉树b的宽度 #include < ...

  8. 3009基于二叉链表的二叉树结点个数的统计(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...

  9. 哈夫曼树,二叉树结点个数计算

    (1)已知总结点数n,求叶子结点n0 全二叉树中假设度为0,1,2的节点个数分别为n0,n1,n2 n=n0+n1+n2 n0=n2+1 消去n2,得 n=2n0+n1-1 n1只能为0或者1 所以, ...

最新文章

  1. sql datetime 加一天_PowerQuery数据库Sql.Database条件查询
  2. Keras【Deep Learning With Python】实现线性回归模型
  3. String为什么是不可变类型?
  4. 【Python】【应用 01】使用python初步处理文件数据就那么简单!(本文以处理excel和目录为例)
  5. 用python一键批量压缩备份文件,不必再用鼠标点点点
  6. JavaScript内核系列 第8章 面向对象的JavaScript(下)
  7. 麻瓜编程python爬虫微专业_麻瓜编程 - 主页
  8. 手写自己的MyBatis框架-V2.0 可优化之处
  9. 关情纸尾-----Quartz2D-绘制富文本,绘制图片.
  10. 怎样组合数字python_利用python实现数字组合
  11. svn拷贝一个项目作为新项目
  12. QCache 缓存(类似于map的模板类,逻辑意义上的缓存Cache,方便管理,默认类似于LRU的淘汰算法)...
  13. 两年前,梦开始的地方.
  14. java jdbc 链接pg_使用PostgreSQL JDBC连接池
  15. 5V升压充电12.6V锂电池方案
  16. Python断言工具包assertP
  17. mac制作u盘启动盘
  18. 硬件工程师成长之路(1)——元件基础
  19. c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
  20. 把代码和环境做成docker镜像_Jenkins把GitHub项目做成Docker镜像

热门文章

  1. 电网络节点电压matlab,电力网潮流电压计算例题与matlab程序
  2. dell 1464 升级固态硬盘ssd 记录
  3. 智能电子秤方案控制板设计开发
  4. 事和书的感悟_李孟_新浪博客
  5. 拆分体提示工具未形成相交_下面哪一项不是一般模型拆分原则( ) (1.0分)_学小易找答案...
  6. android 百度名片
  7. 企业4+1核心竞争力模型
  8. 超实用!移动端界面中的版式设计原理(上)
  9. [POI2014]FAR-FarmCraft 树形DP + 贪心思想
  10. 线上CPU100%及应用OOM的排查和解决过程