《Java数据结构》这些树和二叉树的性质你还记得吗?_java 二叉树 性质

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

有两个点需要注意一下:

  1. 树是递归定义的——也就是说树的定义之中还用到了树的定义
  2. 树形结构中,子树之间不能有交集,否则就不是树形结构

下面来解释一下这两点:

🌰比如这是一个树

下图的子树T1和T2就是根结点A的子树。当然,D,G,H,I组成的树又是B为结点的子树,E、J组成的树是C为结点的树的子树。

🌰一些非树的例子

上面三个就不是树结构,只有右下角的那个称为树型结构


树的结点分类

📝树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数称为结点的度(Degree) 。

📝度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。

🌰如下图,因为这棵树结点的度的最大值是结点D的度,为3,所以树的度为3.


结点之间的关系

  1. **双亲节点或父节点:**若一个节点含有子节点,则这个节点称为其子节点的父节点
  2. **孩子结点或子结点:**一个结点含有的子树的根结点称为该结点的子结点
  3. **兄弟节点:**具有相同父节点的节点互称为兄弟节点

**节点的祖先:**从根到该节点所经分支上的所有节点,如上图对于结点H来说,D、B、A都是他的祖先

**子孙:**以某节点为根的子树中任一节点都称为该节点的子孙。如上图:B的子孙有D、G、H、I


树的存储结构

📝树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。我们这里就简单的了解其中最常用的孩子兄弟表示法。(关于其他几种表示法,大话数据结构这本书里有详细的介绍)

我们观察后发现,任意一棵树,它的结点的第一个孩子如果存在就是唯一的。因此,我们设置两个结点引用,分别指向该结点的第一个孩子和该结点的右兄弟

结点结构如表所示:

datefristchildrightbrother

class TreeNode {

int date;  // 数据域

TreeNode firstchild;    // 该结点的第一个孩子

TreeNode rightbrother;  // 该结点的右兄弟

}

那么下面的树:

就可以表示成:

这种表示其实就是把一棵复杂的树变成了一棵二叉树

至于二叉树是什么?这也是咱们接下来要重点聊的内容😁


其他相关概念

📝结点的层次:从一棵树的树根开始,树根所在层为第一层,根的孩子结点所在的层为第二层,依次类推

📝**树的高度或深度:**树中节点的最大层次

📝**堂兄弟节点:**双亲在同一层的节点互为堂兄弟

🌻**森林:**由m(m>0)棵互不相交的树的集合称为森林;

🌻有序树和无序树:如果树中结点的子树从左到右看,谁在左边,谁在右边,是有规定的,这棵树称为有序树;反之称为无序树。

在有序树中,一个结点最左边的子树称为"第一个孩子",最右边的称为"最后一个孩子"。

二、 二叉树

二叉树的概念

🌻简单地理解,满足以下两个条件的树就是二叉树:

  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

🌰例如,图 1a) 就是一棵二叉树,而图 1b) 则不是。

再深入的理解就是:

📝 一棵二叉树是结点的一个有限集合,该集合:
1. 或者为空
2. 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成

🍑 从上图可以看出:
1. 二叉树不存在度大于2的结点
2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

注意:对于任意的二叉树都是由以下几种情况复合而成的:

🍑 自然界的二叉树:

🍑我们数据结构要研究的二叉树:

📝特殊的二叉树

🍑如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树

🍑如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树

如图 3a) 所示是一棵完全二叉树,图 3b) 由于最后一层的节点没有按照从左向右分布,因此只能算作是普通的二叉树。

其实完全二叉树类似这下面这种情况

从中我们也可以发现一些规律,如果一个完全二叉树的某一个结点没有右子树,那么该结点一定没有左子树,有右子树就一定得有左子树。它从左到右一定是连续的,中间不能出现空的。

🔔同时我们需要注意一个慢二叉树一定是一棵完全二叉树,但完全二叉树不一定是满二叉树。


二叉树的性质

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

我们来观察下面的图形

经过归纳分析,我们很容易得出这个结论

**性质2:**若规定根节点的层数为1,则深度为k的二叉树的最大结点数是2^k - 1 .(深度为k意思就是有k层的二叉树)

我们前面已经知道,一棵非空二叉树的第i层上2^(i-1) 个结点,那么k层的二叉树的结点树不就是首项是1、公比是2的等比数列求和吗?

**性质3:**对任何一棵非空二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有n0 =n2 +1

📝对于二叉树来说,我们会发现(除了根节点)对于每一个结点来说,都有其对应父结点分支指向它,假设树中分枝数为 B,那么总的结点数就是B+1

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

枝数为 B**,那么总的结点数就是B+1

[外链图片转存中…(img-8AxQu6Mf-1715847161235)]
[外链图片转存中…(img-6DyJNTKI-1715847161235)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值