数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)

news/2025/3/14 1:43:41/

目录

二叉树的定义

二叉树具体的五种基本形态

1.空树

2.只有一个节点

3.有左子树,但右子树为空

4.有右子树,但左子树为空

 5.左右两子树都不为空

特殊二叉树

斜二叉树

满二叉树 

完全二叉树

二叉树的几个重要性质

初识二叉树的几个操作函数 


二叉树的定义

二叉树T:一个有穷的节点集合。

这个集合可以为空;若不为空,则它是由根节点和称为其左子树T_{L}右子树T_{R}的两个不相交的二叉树组成。

二叉树具体的五种基本形态

1.空树

\Phi

2.只有一个节点

\bigcirc

3.有左子树,但右子树为空

4.有右子树,但左子树为空

 5.左右两子树都不为空

要注意,二叉树与普通的度为二的树不同的一点是:二叉树的子树有左右顺序之分。

特殊二叉树

斜二叉树

斜二叉树都只有左儿子或者都只有右儿子,这样的二叉树,实际上相当于一个链表,形成了一个线性结构。

满二叉树 

又叫完美二叉树

 这样的二叉树是除了最底层的叶节点没有节点,其它每一个节点都有两个儿子;且叶节点都在同一层。

完全二叉树

有n个节点的二叉树,对树中节点按从上至下、从左到右顺序进行编号,编号为i(1<= i <= n)节点与满二叉树中编号为i节点在二叉树中位置相同。

简单地来说,完全二叉树的节点编号要与它满二叉树形态下的节点编号相一致,如下图:

二叉树的几个重要性质

  • 一个二叉树第i层的最大节点数为2^{i-1},i >=1。

这个性质很好理解,像满二叉树这种树每一层都达到了最大节点数,节点数满足首项为1,公比为2的等比数列。

  •  深度为K的二叉树有最大节点总数为:2^{k}-1,k >=1。

能达到最大节点数的树是怎样的呢?

当然就是完美二叉树啦,其节点数:

第一层:1

第二层:2

第三层:4

......

第k层:2^{k-1}

用等比数列求和公式S_{n} = \frac{a_{1}(1-q^{n})}{1-q}(q\neq1) = \frac{a_{1}-a_{n}q}{1-q} = \frac{a_{1}}{1-q}(1-q^{n})

就可以求和最大节点数为:2^{k}-1。

  • 对任何非空二叉树T,若n0表示叶节点的个数,n2是度为2的非叶节点个数,那么两者满足关系n0 = n2 +1。

我们从边的角度来推导出这个性质:

初识二叉树的几个操作函数 

  • Boolean IsEmpty(BinTree BT):判别BT是否为空
  • void Traversal(BinTree BT):遍历,按某个顺序访问每个节点
  • BinTree CreatBinTree():创建一个二叉树

常用的遍历方法有:

  1. void PreOrderTrversal(BinTree BT):先序——根、左子树、右子树
  2. void InorderTraversal(BinTree BT):中序——左子树、根、右子树
  3. void PostOrderTraversal(BinTree BT):后序——左子树、右子树、根
  4. void LevelOrderTraversal(BinTree BT):层次遍历,从上到下、从左到右

end 


学习自:MOOC数据结构——陈越、何钦铭


http://www.ppmy.cn/news/43270.html

相关文章

软件测试工作主要做什么

随着信息技术的发展和普及&#xff0c;人们对软件的使用越来越普及。但是在软件的使用过程中&#xff0c;软件的效果却不尽如人意。为了确保软件的质量&#xff0c;整个软件业界已经逐渐意识到测试的重要性&#xff0c;也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…

Moonbeam操作指南 | 如何设置Moonbeam开发节点

Moonbeam开发节点是为本地构建和测试应用的个人开发环境。对以太坊开发者来说&#xff0c;可以和Ganache相媲美。可以使你快速上手&#xff0c;且无需中继链的支出即可轻松实现。 有2种方式可以开始运行节点&#xff1a;使用Docker运行一个预构建的二进制文件&#xff0c;或者…

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件&#xff0c;也是固态继电器的一种&#xff0c;其主要作用是隔离输入与输出电路&#xff0c;用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号&#xff0c;通过光纤传输到另一端&#xff0c;再由另一端的…

C#使用EF框架连接SQLServer数据库

C#中使用Entity Framework (EF)连接SQL Server数据库可以使用多种方法&#xff0c;其中比较常用的是Code First和Database First两种方式。 Code First方式 Code First是指通过C#代码来定义数据模型&#xff0c;EF会根据代码自动生成数据库结构。使用Code First需要进行以下步…

JavaWeb开发 —— Web入门

目录 一、Spring 二、SpringBootWeb快速入门 三、HTTP协议 1. 概述 2. 请求协议 3. 响应协议 四、Web服务器 - Tomcat 1. 介绍 2. 基本使用 3. 入门程序解析 一、Spring ① 官网&#xff1a;http://spring.io ② Spring 发展到今天已经形成了一种开发生态圈&…

构建自动过程:FinalBuilder 8.0 Crack

使用 FinalBuilder 自动化您的构建过程很简单。使用 FinalBuilder&#xff0c;您无需编辑 xml 或编写脚本。可视化定义和调试您的构建脚本&#xff0c;然后使用 Windows 调度程序安排它们&#xff0c;或将它们与 Continua CI、Jenkins 或任何其他 CI 服务器集成。 成千上万的软…

MySQL5.5安装图解

一、MYSQL的安装 &#xff11;、打开下载的mysql安装文件mysql-5.5.27-win32.zip&#xff0c;双击解压缩&#xff0c;运行“setup.exe” &#xff12;、选择安装类型&#xff0c;有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项&#xff0c;选择“Cu…

爬虫1000+个C程序

爬虫1000个C程序 问题场景 由于实验需要&#xff0c;我需要1000个elf文件&#xff0c;可是网络可获取的elf文件较少&#xff0c;c程序较多&#xff0c;所以首先下载c程序&#xff0c;之后gcc编译链接生成elf文件。我需要的C源码不是项目级别的&#xff0c;正常100行左右就可以…