二叉树空指针个数的理解
引言
二叉树在使用链式存储时,每一个结点都有两个指针,或者为空或者指向子结点。
二叉树所有空指针的个数为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.待补充
二叉树空指针个数的理解相关推荐
- 【二叉树】先序序列为a,b,c,d 的不同二叉树的个数
[二叉树]先序序列为a,b,c,d 的不同二叉树的个数 rosefunR 2019-07-23 10:56:40 8639 收藏 17 分类专栏: LeetCode 版权 1.问题 先序序列(前序 ...
- 统计表达式二叉树操作数个数
统计表达式二叉树操作数个数 (10分) 本题要求实现一个函数,统计二叉树表示的表达式中操作数的个数. 函数接口定义: int OperandCount ( BiTree T); T是二叉树树根指针,函 ...
- [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数
leetcode官方的题解:https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha ...
- 【数据结构】基于二叉链表的二叉树结点个数的统计
基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...
- 6-2 统计二叉树结点个数 (10分)_数据结构实验5_羊卓的杨
6-2 统计二叉树结点个数 (10分) 本题要求实现一个函数,可统计二叉树的结点个数. 函数接口定义: int NodeCount ( BiTree T); T是二叉树树根指针,函数NodeCount ...
- 二叉树节点个数,叶子个数,第K层个数,最低公共节点
1. 节点个数 function getNodeNum(root){if(root == null){return 0;}//+1为root的计数return getNodeNum(root.left ...
- 求二叉树节点个数、叶子节点、节点层次与宽度
需实现:(1)输出二叉树b的节点个数 (2)输出二叉树b的叶子节点个数 (3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次. (4)利用层次遍历求二叉树b的宽度 #include < ...
- 3009基于二叉链表的二叉树结点个数的统计(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...
- 哈夫曼树,二叉树结点个数计算
(1)已知总结点数n,求叶子结点n0 全二叉树中假设度为0,1,2的节点个数分别为n0,n1,n2 n=n0+n1+n2 n0=n2+1 消去n2,得 n=2n0+n1-1 n1只能为0或者1 所以, ...
最新文章
- sql datetime 加一天_PowerQuery数据库Sql.Database条件查询
- Keras【Deep Learning With Python】实现线性回归模型
- String为什么是不可变类型?
- 【Python】【应用 01】使用python初步处理文件数据就那么简单!(本文以处理excel和目录为例)
- 用python一键批量压缩备份文件,不必再用鼠标点点点
- JavaScript内核系列 第8章 面向对象的JavaScript(下)
- 麻瓜编程python爬虫微专业_麻瓜编程 - 主页
- 手写自己的MyBatis框架-V2.0 可优化之处
- 关情纸尾-----Quartz2D-绘制富文本,绘制图片.
- 怎样组合数字python_利用python实现数字组合
- svn拷贝一个项目作为新项目
- QCache 缓存(类似于map的模板类,逻辑意义上的缓存Cache,方便管理,默认类似于LRU的淘汰算法)...
- 两年前,梦开始的地方.
- java jdbc 链接pg_使用PostgreSQL JDBC连接池
- 5V升压充电12.6V锂电池方案
- Python断言工具包assertP
- mac制作u盘启动盘
- 硬件工程师成长之路(1)——元件基础
- c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
- 把代码和环境做成docker镜像_Jenkins把GitHub项目做成Docker镜像
热门文章
- 电网络节点电压matlab,电力网潮流电压计算例题与matlab程序
- dell 1464 升级固态硬盘ssd 记录
- 智能电子秤方案控制板设计开发
- 事和书的感悟_李孟_新浪博客
- 拆分体提示工具未形成相交_下面哪一项不是一般模型拆分原则( ) (1.0分)_学小易找答案...
- android 百度名片
- 企业4+1核心竞争力模型
- 超实用!移动端界面中的版式设计原理(上)
- [POI2014]FAR-FarmCraft 树形DP + 贪心思想
- 线上CPU100%及应用OOM的排查和解决过程