二叉树全分析(超详细总结建议收藏)

简介: 二叉树全分析(超详细总结建议收藏)

前言


二叉树


二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分 。


二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。

二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点 。


1684820445049.png


相关概念


节点:包含一个数据元素及若干指向子树分支的信息。

节点的度:一个节点拥有子树的数目称为节点的度。

叶子节点:也称为终端节点,没有子树的节点或者度为零的节点。

分支节点:也称为非终端节点,度不为零的节点称为非终端节点。

树的度:树中所有节点的度的最大值。

节点的层次:从根节点开始,假设根节点为第1层,根节点的子节点为第2层,依此类推,如果某一个节点位于第L层,则其子节点位于第L+1层 。

树的深度:也称为树的高度,树中所有节点的层次最大值称为树的深度。

有序树:如果树中各棵子树的次序是有先后次序,则称该树为有序树。

无序树:如果树中各棵子树的次序没有先后次序,则称该树为无序树。

森林:由m(m≥0)棵互不相交的树构成一片森林。如果把一棵非空的树的根节点删除,则该树就变成了一片森林,森林中的树

由原来根节点的各棵子树构成。



47994ba1548ab728e895df21ba145b27_b54c04a71e5c4f54a2c4532ecf648a4c.png


1684820471944.png


二叉树的性质


1:二叉树的第i层上至多有2i-1(i≥1)个节点 。

2:深度为h的二叉树中至多含有2h-1个节点 。

3:若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。

4:具有n个节点的满二叉树深为log2n+1。

5:若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:

当i=1时,该节点为根,它无双亲节点。

当i>1时,该节点的双亲节点的编号为i/2。

若2i≤n,则有编号为2i的左节点,否则没有左节点。

若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点


二叉树的五种基本形态


我们知道二又树是有限元素的集合,该集合或者为空,或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。


空二叉树


当集合为空时,称该二又树为空二又树(顾名思义它什么都没有🤪🤪🤪)


1684820497223.png


只有一个根节点的二叉树


显然它只有一个根结点


1684820507641.png


没有任何结点的树才是空二叉树


只有根节点和左子树TL的二叉树


每个有孩子的结点都只有左孩子结点的二叉树


1684820523278.png


只有根节点和右子树TR的二叉树

每个有孩子的结点都只有右孩子结点的二叉树


1684820538475.png


完全二叉树


完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。


1684820549471.png


叶子结点只能出现在最下层和次下层。

最下层的叶子结点集中在树的左部。

倒数第二层若存在叶子结点,一定在右部连续位置。

如果结点度为1,则该结点只有左孩子,即没有右子树。

同样结点数目的二叉树,完全二叉树深度最小。


1684820564708.png


特殊的二叉树


在二叉树的这个大家族中肯定存在一些特殊的例子,它们有着二叉树的性质,却又与众不同。


满二叉树


一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的深度为K,且结点总数是(2^k) -1 ,则它就是满二叉树。(一棵满二叉树的每一个结点要么是叶子结点,要么它有两个子结点,但是反过来不成立,因为完全二叉树也满足这个要求,但不是满二叉树)

满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。


有意思的是在国外教材中关于满二叉树的定义是这样的:a binary tree T is full if each node is either a leaf or possesses exactly two childnodes.(如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树)


1684820575129.png


叶子只能出现在最下一层。出现在其它层就不可能达成平衡。

非叶子结点的度一定是2。

在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。


斜二叉树


所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树


1684820586092.png


度为1;

只有左子节点或右子节点;



小结


好了关于二叉树的基本知识就讲到这了,关于二叉树的更多内容未来我会持续更新,希望这篇文章对你有帮助,下次见

目录
相关文章
|
2月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
10月前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
10月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
824 4
|
Ubuntu 关系型数据库 MySQL
Ubuntu 中apt 安装MySQL数据库
Ubuntu 中apt 安装MySQL数据库
391 0
|
10月前
|
运维 监控 Linux
别再只会使用简单的 ping 命令了,Linux 中这些高级 ping 命令可以提高工作效率!
在 Linux 系统中,ping 命令不仅用于检测网络连通性和延迟,还拥有多种高级选项和技巧,如定制数据包大小、获取详细统计信息、持续 ping、指定源地址和多目标 ping。本文详细介绍这些高级命令及其在性能测试、故障排查和网络监控中的实际应用,帮助你提升网络管理效率。
843 3
|
存储 JavaScript 前端开发
成功解决:Cannot read properties of undefined (reading ‘commit‘)
这篇文章提供了解决Vuex中"Cannot read properties of undefined (reading 'commit')"错误的两种方法:检查模板中的数据属性是否存在,以及确保在Vue实例中正确挂载了store对象。
成功解决:Cannot read properties of undefined (reading ‘commit‘)
编译x264出现错误:No working C compiler found.
编译x264出现错误:No working C compiler found.
1333 0
|
机器学习/深度学习 算法 数据处理
探索XGBoost:多分类与不平衡数据处理
探索XGBoost:多分类与不平衡数据处理
1260 6
【SpringSecurity 】SpringSecurity 自定义登录页面
【SpringSecurity 】SpringSecurity 自定义登录页面
251 0
|
机器学习/深度学习 搜索推荐 数据挖掘
24个终极数据科学项目(可免费获取资源)
本文精选了24个数据科学项目,并囊括了各个领域和各种不同大小的数据集。另外,所有的数据集都是开源、可免费获取的。
6897 0

热门文章

最新文章