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

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

前言


二叉树


二叉树(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;

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



小结


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

目录
相关文章
|
7月前
|
Linux
数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度
|
6月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
51 4
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题
78 0
|
7月前
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
38 0
|
7月前
|
算法
递归算法:二叉树前序、中序、后序遍历解析与递归思想深度剖析
递归算法:二叉树前序、中序、后序遍历解析与递归思想深度剖析
155 0
|
存储 算法 大数据
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(下)
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(下)
76 0
|
存储 Linux 文件存储
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(上)
树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式(上)
79 0
【Leetcode -100.相同的树 -104.二叉树的深度】
【Leetcode -100.相同的树 -104.二叉树的深度】
41 0
|
算法 数据库管理
【如何唯一确定一棵二叉树】思想分析及步骤详解
【如何唯一确定一棵二叉树】思想分析及步骤详解
306 0
【如何唯一确定一棵二叉树】思想分析及步骤详解
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树
二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树