【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...

简介: 【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...

这个结论是基于二叉树的性质得出的。我们可以通过归纳法来证明这个结论。

首先,我们定义几个概念:

  1. 终端结点(也叫叶子结点):没有子结点的结点。
  2. 度数为2的结点:有两个子结点的结点。

现在,我们来证明对于任何一颗二叉树T,若其终端结点为n0,那么度数为2的结点数为n2,则n0 = n2 + 1。

基础情况:

对于一颗只有一个结点的二叉树(即根结点),它没有度数为2的结点(n2 = 0),并且有一个终端结点(n0 = 1)。所以,n0 = n2 + 1。

归纳步骤:

假设对于所有高度小于h的二叉树,这个结论都是成立的。现在我们来考虑一颗高度为h+1的二叉树T。

  1. 如果T的根结点是一个终端结点,那么T只有一个结点,这个情况我们已经在基础情况中证明过了。
  2. 如果T的根结点有一个子结点,那么这个子树的高度为h。根据归纳假设,子树中终端结点的数量n0’和度数为2的结点数量n2’满足n0’ = n2’ + 1。对于整颗树T,终端结点的数量n0 = n0’,度数为2的结点数量n2 = n2’。所以,n0 = n2 + 1。
  3. 如果T的根结点有两个子结点,那么这两个子树的高度都小于h。根据归纳假设,每个子树中终端结点的数量n0’和度数为2的结点数量n2’满足n0’ = n2’ + 1。对于整颗树T,终端结点的数量n0 = n0’左 + n0’右,度数为2的结点数量n2 = n2’左 + n2’右 + 1(加1是因为根结点的度数为2)。所以,n0 = (n2’左 + 1) + (n2’右 + 1) = n2’左 + n2’右 + 2 = n2 + 1。

通过这三种情况,我们证明了对于高度为h+1的二叉树,n0 = n2 + 1也成立。

综上所述,通过归纳法我们证明了对于任何一颗二叉树T,若其终端结点为n0,那么度数为2的结点数为n2,则n0 = n2 + 1。


为了展示这个结论在实际二叉树中是如何工作的,我将提供一个具体的二叉树示例,并分析其结点的度数和数量。

考虑以下二叉树:

A
   / \
  B   C
 /   / \
D   E   F

在这颗二叉树中:

  • A、B、C是度数为2的结点(n2 = 3)
  • D、E、F是终端结点(n0 = 3)

根据我们的结论,n0 应该等于 n2 + 1。在这个例子中,3 = 3 + 1并不成立。这似乎与我们的结论相矛盾。

但是,我们需要注意的是这个结论是基于所有结点都遵循二叉树的定义来的,即每个结点的度数要么是0,要么是2。在这个例子中,结点B和C的度数为1,这不符合我们的假设条件。

为了使结论成立,我们可以添加两个虚拟的终端结点(用X表示)来补全二叉树:

A
   / \
  B   C
 /|   |\
D X   E F

现在,我们有:

  • A、B、C是度数为2的结点(n2 = 3)
  • D、E、F、X、X是终端结点(n0 = 5)

现在,n0 = n2 + 1 成立,因为 5 = 3 + 1。

通过这个例子,我们可以看到当二叉树中的每个结点的度数要么是0,要么是2时,n0 = n2 + 1 的结论是成立的。如果树中有度数为1的结点,我们可以通过添加虚拟的终端结点来使结论成立。

结语

在我们的编程学习之旅中,理解是我们迈向更高层次的重要一步。然而,掌握新技能、新理念,始终需要时间和坚持。从心理学的角度看,学习往往伴随着不断的试错和调整,这就像是我们的大脑在逐渐优化其解决问题的“算法”。

这就是为什么当我们遇到错误,我们应该将其视为学习和进步的机会,而不仅仅是困扰。通过理解和解决这些问题,我们不仅可以修复当前的代码,更可以提升我们的编程能力,防止在未来的项目中犯相同的错误。

我鼓励大家积极参与进来,不断提升自己的编程技术。无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力。

目录
相关文章
|
1月前
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
82 4
|
1月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
132 8
|
2月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
32 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
2月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
37 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
2月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
31 1
|
2月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
29 1
|
2月前
|
存储
【数据结构】二叉树链式结构——感受递归的暴力美学
【数据结构】二叉树链式结构——感受递归的暴力美学
|
2月前
|
存储 编译器 C++
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析
|
2月前
|
存储 算法 调度
数据结构--二叉树的顺序实现(堆实现)
数据结构--二叉树的顺序实现(堆实现)
|
2月前
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解(三)
【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解