数据结构(Java):树二叉树

目录

1、树型结构

1.1 树的概念

1.2 如何判断树与非树

 1.3 树的相关概念

1.4 树的表示形式

1.4.1 孩子兄弟表示法

2、二叉树

2.1 二叉树的概念

2.2 特殊的二叉树

 2.3 二叉树的性质

2.4 二叉树的存储

2.5 二叉树的遍历


1、树型结构

1.1 树的概念

树型结构是一种非线性数据结构,是由有限个节点构成的具有层次关系的集合,它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

树型结构具有以下特点:

  1. 有一个特殊的结点,称为根结点,根结点没有前驱结点
  2. 除根节点外,每个节点都只有一个前驱,可以有多个或0个后继
  3. 树是递归定义的
  4. 树型结构中,子树之间不能有交集,否则就不是树型结构

1.2 如何判断树与非树

  1. 树的子树是不可相交的

  2. 在树中,除根节点外,每个节点有且仅有一个父节点

  3. N个节点的树具有N-1条边 

 1.3 树的相关概念

  • 结点的度:一个结点含有子树的个数称为该结点的度
  • 树的度:一棵树中,所有结点度的最大值称为树的度
  • 叶子结点:度为0的节点,即叶子结点没有孩子
  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点
  • 子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点
  • 根结点:一棵树中,没有双亲结点的结点
  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推
  • 树的高度或深度:树中结点的最大层次

1.4 树的表示形式

树有很多种表示方式,如:双亲表示法, 孩子表示法、孩子双亲表示法、孩子兄弟表示法

我们这里只介绍最常用的孩子兄弟表示法

1.4.1 孩子兄弟表示法

孩子兄弟表示法,即左孩子右兄弟表示法。

一个节点,只存储数据和其第一个孩子、第一个兄弟的引用。


2、二叉树

2.1 二叉树的概念

二叉树由n个结点构成的有限集(n≥0),n=0时为空树,n>0时为非空树。

二叉树可以为空树。

二叉树是一种特殊的树,二叉树的特点是每个节点最多有两个子节点(也就是说二叉树的度最多为2),并且这两个子节点有明确的左右之分,不能颠倒。


2.2 特殊的二叉树

两种特殊的二叉树:

  1. 满二叉树:一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。如果一棵二叉树的层数为k,且结点总数是 2^{k}-1,则它就是满二叉树。
  2. 完全二叉树:对于深度为K的,有n 个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。

注意:满二叉树是一种特殊的完全二叉树。 


 2.3 二叉树的性质

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

2. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 2^{k}-1(k>=0)

3. 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的结点个数为n2,则有n0=n2+1

4. 具有n个结点的完全二叉树的深度k为\log_{2}(n+1) 上取整

5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i 的结点有(存在的情况下):

  • 父节点下标:(i-1)/2
  • 左孩子下标:2i+1
  • 右孩子下标:2i+2

6.节点个数 = 分支数+1(二叉树和树均适用) 

7.对于完全二叉树,度为1的节点只有1个或0个


2.4 二叉树的存储

二叉树的存储结构分为:顺序存储和类似于链表的链式存储。

二叉树的链式存储是通过一个一个的节点引用起来的,常见的有孩子表示法、孩子双亲表示法。

孩子表示法:

孩子双亲表示法:


到这里,我们再来回顾下二叉树的概念:

二叉树是:

  1. 空树
  2. 非空:根节点、根节点的左子树、根节点的右子树组成的

可以看出二叉树定义是递归式的。 


2.5 二叉树的遍历

遍历是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容、节点内容加 1)。

  • 前序遍历:依次访问:根节点---左子树---右子树
  • 中序遍历:依次访问:左子树---根节点---右子树
  • 后序遍历:依次访问:左子树---右子树---根节点
  • 层序遍历:从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。

OK~本次博客到这里就结束了,

感谢大家的阅读~欢迎大家在评论区交流问题~

如果博客出现错误可以提在评论区~

创作不易,请大家多多支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/797733.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL复合查询(重点)

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J mysql> select * from emp where (sal>500 or jobMANAGER) and ename l…

数据湖仓一体(一) 编译hudi

目录 一、大数据组件版本信息 二、数据湖仓架构 三、数据湖仓组件部署规划 四、编译hudi 一、大数据组件版本信息 hudi-0.14.1zookeeper-3.5.7seatunnel-2.3.4kafka_2.12-3.5.2hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1flink-1.17.2apache-dolphinscheduler-3.1.9…

[Vulnhub] Sedna BuilderEngine-CMS+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.104TCP:22, 53, 80, 110, 111, 139, 143, 445, 993, 995, 8080, 55679 $ nmap -p- 192.168.8.104 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 …

C++20中的consteval说明符

在C20中,立即函数(immediate function)是指每次调用该函数都会直接或间接产生编译时常量表达式(constant expression)的函数。这些函数在其返回类型前使用consteval关键字进行声明。 立即函数是constexpr函数,具体情况取决于其要求。与constexpr相同&…

半小时获得一张ESG入门证书【详细中英文笔记一】

前些日子,有朋友转发了一则小红书的笔记给我, 标题是《半小时获CFI官方高颜值免费证书 ESG认证》。这对考证狂魔的我来说,必然不能错过啊,有免费的羊毛不薅白不薅。 ESG课程的 CFI 官方网址戳这里:CFI 于是信心满满的…

清华大学孙富春教授团队开发了多模态数字孪生环境,辅助机器人获得复杂的 3C 装配技能

中国是全球3C产品(电脑、通信和消费电子)的主要生产国,全球70%的3C产品产能集中在中国。3C智能制造装备的突破与产业化,对于提升我国制造产业的全球竞争力意义重大。 机器人在计算机、通信和消费电子 (3C) …

常用的设计模式和使用案例汇总

常用的设计模式和使用案例汇总 【一】常用的设计模式介绍【1】设计模式分类【2】软件设计七大原则(OOP原则) 【二】单例模式【1】介绍【2】饿汉式单例【3】懒汉式单例【4】静态内部类单例【5】枚举(懒汉式) 【三】工厂方法模式【1】简单工厂模式&#xf…

springboot 程序运行一段时间后收不到redis订阅的消息

springboot 程序运行一段时间后收不到redis订阅的消息 问题描述 程序启动后redis.user.two主题正常是可以收到消息的,发一条收一条,但是隔一段时间后;就收不到消息了; 此时如果你手动调用发送另外一个消息订阅redis.user.two2&…

vmware workstation 虚拟机安装

vmware workstation 虚拟机安装 VMware Workstation Pro是VMware(威睿公司)发布的一代虚拟机软件,中文名称一般称 为"VMware 工作站".它的主要功能是可以给用户在单一的桌面上同时运行不同的操作系统,它也是可进 行开发…

c# 容器变换

List<Tuple<int, double, bool>> 变为List<Tuple<int, bool>>集合 如果您有一个List<Tuple<int, double, bool>>并且您想要将其转换为一个List<Tuple<int, bool>>集合&#xff0c;忽略double值&#xff0c;您可以使用LINQ的S…

3U 与 SV630A 伺服实现 CANLINK 通讯

1、打开 AUTOSHOP&#xff0c;点击工具>系统选项&#xff0c;勾选自动生成 canlink 轴 控通讯配置和 canlink 轴控指令增强功能。 2、检查 plc 的拨码是否已经拨上去。 1 代表 485 通讯&#xff0c;2 代表 can 通讯&#xff0c;将 2 打到 ON 状态。还有9&#xff0c;10拨…

Matlab 计算一个平面与一条直线的交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,将直线 L L L与由其齐次坐标 V = (

IDEA社区版使用Maven archetype 创建Spring boot 项目

1.新建new project 2.选择Maven Archetype 3.命名name 4.选择存储地址 5.选择jdk版本 6.Archetype使用webapp 7.create创建项目 创建好长这样。 检查一下自己的Maven是否是自己的。 没问题的话就开始增添java包。 [有的人连resources包也没有&#xff0c;那就需要自己添…

AI人工智能开源大模型生态体系分析

人工智能开源大模型生态体系研究 "人工智能开源大模型生态体系研究报告v1.0"揭示&#xff0c;AI(A)的飞速发展依赖于三大核心&#xff1a;数据、算法和算力。这一理念已得到业界广泛认同&#xff0c;三者兼备才能推动AI的壮大发展。随着AI大模型的扩大与普及&#xf…

el-table 动态添加删除 -- 鼠标移入移出显隐删除图标

<el-table class"list-box" :data"replaceDataList" border><el-table-column label"原始值" prop"original" align"center" ><template slot-scope"scope"><div mouseenter"showClick…

finalshell替换背景图片

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

SpringCloud之Nacos集群,让Nacos不再是谜

Nacos集群搭建 集群结构 Nacos的集群环境我们采用这种结构&#xff1a;3个Nacos注册中心1个MySql Nacos集群 我们在windows上安装3个Nacos节点。分配配置相关信息 application.properties: 持久化数据到mysql中 修改 cluster.conf.example为cluster.conf然后在里面写上相关…

stm32h743 NetXduo 实现http server CubeIDE+CubeMX

在这边要设置mpu的大小,要用到http server,mpu得设置的大一些 我是这么设置的,做一个参考 同样,在FLASH.ld里面也要对应修改,SECTIONS里增加.tcp_sec和 .nx_data两个区,我们用ram_d2区域去做网络,这个就是对应每个数据在d2区域的起点。 在CubeMX里,需要用到filex、dhc…

萝卜快跑:未来出行的双刃剑

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在这个日新月异的科技时代&#xff0c;无人驾驶技术正以前所未有的速度改变着我们的出行方式。萝卜快跑&#xff0c;作为自动驾驶出租车领域的佼佼者&#xff0c;其出现无疑为城市交通注入了新的活力&#xff…

电容充放电时间计算

电容充电时间的结论&#xff1a;t充电 R * C 时&#xff0c;Ut2*VCC/3&#xff0c;这是一个不能让我释怀的结论。 1、电池充电 U0表示电容C在充电0时刻的电压值; Ut表示电容C在充电t时刻的电压值; U1表示电容C在充电∝时刻的电压值&#xff0c;就是电源电压; Q C * U ---…