"二叉树的性质与推导及常见习题整理 "

简介: 这篇内容介绍了二叉树的一些性质及其推导。

一、性质推导

1. 若一个二叉树有n个节点,则该二叉树共有(n-1)条边。

推导:如图,可以理解为二叉树除了根节点外,每一个节点头上都有一条边指向它。因此,边的总数就是n-1




2. 若规定 根结点的层数为 1 ,则一棵 非空二叉树的第 i 层上最多有 2^(i-1)   (i>0) 个结点。

推导:当第i层满的时候,就是该层节点数最多的时候。如下图的完全二叉树,第一层最多1个节点,第二层最多2个节点,第三层最多4个节点,第四层最多8个节点……可以归纳出规律:第i层最多2^(i-1)个节点。





3. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 2^k -1


(k>=0)

推导:深度为K的二叉树最大节点的情况是该树为一棵满二叉树。将每一层节点数求和,即该树的总结点数。求和的过程是等比数列的求和过程,根据等比数列求和的公式(其中n是项数):




代入a1(首项)为2^0即1,q为2,n为k,可得最大节点数为: 2^k-1

4. 具有 n 个结点的完全二叉树的深度 k为log(n+1)上取整

推导:由性质3倒推可得:





向上取整即若一个数是3点几,则答案向上取4。


假设共有16个节点,n=16.则:2^k = 17,而2^4为16,2^5为32,因此k实际为4点几,但若k取4,则不够,还多了一个节点。因此k应当向上取5.


注意:这里的 k 还有另一种表示方式,即log(n)+1。此时 k 为log(n)+1向下取整。向下取整即3点几向下取3.



5. 对任何一棵二叉树 , 如果其 叶结点个数为 n0, 度为 2 的非叶结点个数为 n2, 则有 n0 = n2 + 1 (度为0的节点个数比度为2的节点个数多一个。)

推导:该结论的推导运用到了二叉树边与节点个数的关系。


假设度为0的节点有n0个,度为1的节点有n1个,度为2的节点有n2个,总结点数为N。首先可得:N = n0 + n1 + n2 ……①(节点个数关系)


同时,由性质1可得,该二叉树有N-1条边。度为0的节点发射出0条边,度为1的节点发射出1条边,度为2的节点发射出2条边。由此可得:


N-1 = 0*n0 + 1*n1 + 2*n2 ……②(边条数关系)


由①和②可得结论:n0 = n2 + 1


6. 对于具有 n 个结点的完全二叉树 ,如果按照 从上至下从左至右的顺序对所有节点从 0 开始编号 ,则对于 序号为  i 的结点有 :

       若i>0 ,则其 双亲结点序号为: (i-1)/2 ;若 i=0 , i 为根结点编号 ,无双亲结点。

       若2i+1<n,则其左孩子序号为: 2i+1; 否则无左孩子。

       若2i+2<n ,则其右孩子序号: 2i+2; 否则无右孩子。

推导:如下图规律所示。





若 i = 4,则其双亲序号为 (i-1)/2 即 (4-1)/2 为1;


左孩子2*i+1为9 < 总结点个数10,因此左孩子存在且序号为9;


右孩子2*i+2为10,不小于10,因此右孩子不存在。


若i = 5,则其双亲序号为(i-1)/2 即 2;


左孩子2*i+1为11大于10,因此左孩子不存在。由于该性质是针对完全二叉树的,因此其右孩子一定也不存在。


注意:若从1开始编号,则序号为i的节点的双亲节点序号为 i/2,左孩子节点为 2*i ,右孩子节点为 2*i + 1.


该结论可以不死记硬背,遇到的时候简单画图即可快速推导。







二、常见的二叉树性质习题


  1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为()。


A、不存在这样的二叉树


B、200


C、198


D、199


答案选B。


由性质5可知,n0 = n2+1.n0 = 199+1 = 200


  1. 在具有 2n 个结点的完全二叉树中,叶子结点个数为()。


A n


B n+1


C n-1


D n/2


答案选A。该题运用到了性质5.

首先分析题干,如何求叶子节点的个数?和节点个数相关的公式有二:

n0 = n2 + 1,N = n0 + n1 + n2

已知总个数N为2n,那么只要知道n1即可求出n0.


这里有一个重要的结论:


在完全二叉树中,如果节点总个数为奇数,则没有度为1的节点;如果节点总个数为偶数,只有一个度为1的节点。



节点个数是偶数,只有一个度为1的节点

2n为偶数,因此有一个度为1的节点。

2n = n0 + 1 + n2 = n0 + 1 + n0 - 1

2n = 2n0

n0 = n,故选A



3.一个具有767个节点的完全二叉树,其叶子节点个数为()。

A 383


B 384


C 385


D 386


答案选B。


本题同上。此时共有奇数个节点,因此没有度为1的节点,即n1 = 0.


由 N = n0 + n1 + n2得: 767 = n0 + 0 + n0 - 1


n0 = 768/2 = 384


  1. 一棵完全二叉树的节点数为531个,那么这棵树的高度为()。


A 11


B 10


C 8


D 12


答案选B。


已知节点求高度,运用性质4,h = log(n+1)向上取证。h = log(531+1),向上取整为10,故选B。


  1. 在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个。


A.4


B.5


C.6


D.7


本题选C。

运用了边与节点个数的关系。

令n3 = 2;n2 = 1;n1 = 2;设总结点的个数为N

则由节点个数的关系得 N = n3 + n2 + n1 + n0,由边条数的关系得 N-1 = 3*n3 + 2*n2 + 1*n1 + 0*n0

联立可得:N = 2 + 1 + 2 + n0,N-1 = 3*2 + 2*1 + 1*2 + 0

n0 = 6


  1. 一颗拥有1000个结点的树度为4,则它的最小深度是( )。


A.5


B.6


C.7


D.8


答案选B


当这棵树每一层都是满的时,它的深度最小。也就是说,这棵树应当是一棵满四叉树。


假设高度为h,则由求二叉树节点个数的公式类比可知:根据等比数列求和公式得,这个数的节点个数为(4^h - 1) / 3


当h = 5,最大节点数为341,当h = 6, 最大节点数为1365,所以,最小深度应该向上取整为6。


7.在一颗完全二叉树中,某一个结点没有其左孩子,则该结点一定( )。


A.是根结点


B.是叶结点


C.是分支结点


D.在倒数第二层


答案选B.


完全二叉树中,如果一个节点没有左孩子,则一定没有右孩子,它必定为一个叶子节点。


最后一层一定为叶子节点,但是倒数第二层也可能存在叶子节点。




相关文章
|
存储
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
10613 1
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
|
4月前
|
关系型数据库 MySQL Shell
三、Docker常用命令
把 Docker 玩转,就像一个建筑师,需要掌握两套核心工具:一套用来管理你的“图纸”(镜像),另一套用来管理你用图纸盖好的“房子”(容器)。
532 3
|
移动开发 算法 调度
【贪心算法】一文让你学会“贪心”(贪心算法详解及经典案例)
贪心算法是一种非常常见的算法,它的简单和高效性使其在实际应用中被广泛使用。 贪心算法的核心思想是在每一步都采取当前状态下最优的选择,而不考虑未来可能产生的影响。虽然贪心算法不能保证总是得到最优解,但在很多情况下,它可以获得很好的结果。 本篇文章将介绍贪心算法的基本概念和一些经典应用,以及如何通过贪心算法来解决一些实际问题。希望通过本文的阅读,读者可以对贪心算法有更加深刻的理解,并能够在实际问题中应用贪心算法来得到更好的解决方案。 让我们暴打贪心算法吧!
6755 0
|
9月前
|
存储 Web App开发 缓存
清理C盘空间的6种方法,附详细操作步骤
释放C盘空间并不难。只要掌握合适的方法,哪怕你是电脑小白,也能轻松清理出几十GB空间。下面就为大家介绍6种实用、安全、细致的清理方法,并附上操作步骤。
|
存储 机器学习/深度学习
【数据结构】二叉树全攻略,从实现到应用详解
本文介绍了树形结构及其重要类型——二叉树。树由若干节点组成,具有层次关系。二叉树每个节点最多有两个子树,分为左子树和右子树。文中详细描述了二叉树的不同类型,如完全二叉树、满二叉树、平衡二叉树及搜索二叉树,并阐述了二叉树的基本性质与存储方式。此外,还介绍了二叉树的实现方法,包括节点定义、遍历方式(前序、中序、后序、层序遍历),并提供了多个示例代码,帮助理解二叉树的基本操作。
1336 13
【数据结构】二叉树全攻略,从实现到应用详解
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
存储
分页存储管理系统的计算
分页存储管理系统的计算
1742 2
|
缓存 Java 测试技术
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)
本文以分类的形式总结了IDEA常用、好用快捷键,全是干货~
5377 1
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)
|
存储 算法 Java
【DFS(深度优先搜索)详解】看这一篇就够啦
本文介绍了深度优先搜索(DFS)算法及其应用。DFS从某个顶点出发,深入探索图的每条路径,直到无法前进为止,然后回溯。文章详细解释了DFS的基本思想,并通过示例图展示了其执行过程。此外,文中还探讨了三种枚举方式:指数型枚举、排列型枚举和组合型枚举,并提供了具体的代码实现。最后,文章通过几道练习题帮助读者更好地理解和应用DFS算法。
10802 19
【DFS(深度优先搜索)详解】看这一篇就够啦

热门文章

最新文章