数据结构(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~本次博客到这里就结束了,

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

prompt第二讲-langchain实现中英翻译助手

文章目录 prompt模板 (prompt template)langchain 中的prompt模板 (prompt template)langchain实现中英翻译助手 prompt模板 (prompt template) 开篇我介绍了在llm中,通常输入的那个字符串会被我们称之为prompt,下面就是一个中英文翻译助手的prompt例子…

【Three.js基础学习】16.Physice

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 课程回顾 物理库 3D Ammo.js Cannon.js Oimo.js 2D Matter.js P2.js Planck.js Box2D.js 补充:一些看似3D的效果实际使用2D库来实现的 物理 和 three.js的结合 概念补充…

Java核心篇之JVM探秘:对象创建与内存分配机制

系列文章目录 第一章 Java核心篇之JVM探秘:内存模型与管理初探 第二章 Java核心篇之JVM探秘:对象创建与内存分配机制 第三章 Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战:Arthas工具使用及…

《Windows API每日一练》9.25 系统菜单

/*------------------------------------------------------------------------ 060 WIN32 API 每日一练 第60个例子POORMENU.C:使用系统菜单 GetSystemMenu函数 AppendMenu函数 (c) www.bcdaren.com 编程达人 -------------------------------------------…

亿康源用科技引领发展,开启大健康产业新篇章

(本台记者报)近日,杭州有一家公司凭借深厚的科技研发实力与卓越的创新能力在大健康领域屡受好评,其研发的新品一经推出便成为行业热议。为了探寻该公司的经营秘诀,我们找到了这家公司——亿康源,并有幸与亿…

防火墙组网与安全策略实验

实验要求: 实现: 防火墙接口配置: 所有接口均配置为三层接口 由于G1/0/3口下为vlan环境,所以防火墙需要配置子接口 : 交换机划分vlan分开生产区和办公区、配置trunk干道 : 安全策略: 生产区访…

深度学习概览

引言 深度学习的定义与背景 深度学习是机器学习的一个子领域,涉及使用多层神经网络分析和学习复杂的数据模式。深度学习的基础可以追溯到20世纪80年代,但真正的发展和广泛应用是在21世纪初。计算能力的提升和大数据的可用性使得深度学习在许多领域取得…

[C++] 由浅入深理解面向对象思想的组成模块

文章目录 (一) 类的默认成员函数(二) 构造函数构造函数的特征构造函数示例无参构造带参构造 冲突:全缺省参数的构造函数与无参构造函数 (三)析构函数特性析构函数的析构过程解析 (四)拷贝构造函数什么是拷贝构造?特性为…

初始c语言(2)运算符与表达式

一 c语言提供的运算符类型 以上会后续介绍 二 现阶段我们掌握如下的基本操作符 注意!计算机的除法只会保留整数部分(若被除数未负则不同的软件取整的结果不唯一) 三 自加()自减(--)符号 若为…

GESP CCF C++ 四级认证真题 2024年6月

第 1 题 下列代码中,输出结果是( ) A. 12 24 24 12 B. 24 12 12 24 C. 12 12 24 24 D. 24 24 12 12 第 2 题 下面函数不能正常执行的是() A. B. C. D. 第 3 题 下面程序…

AI Native时代:重塑人机交互与创作流程

随着2024年上海世界人工智能大会的圆满落幕,业界领袖们纷纷就AI应用的新机遇展开深入讨论。结合a16z播客中的观点,本文将探讨AI原生(AI Native)应用的几个关键特征,这些特征正在重新定义我们的工作方式和创作过程。 一…

0708,LINUX目录相关操作 + LINUX全导图

主要是冷气太足感冒了,加上少吃药抗药性差,全天昏迷,学傻了学傻了 01:简介 02: VIM编辑器 04:目录 05:文件 03:常用命令 06:进程 07:进程间的通信 cat t_c…

微信小程序毕业设计-青少年科普教学系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

ftp pool 功能分析及 golang 实现

本文探究一种轻量级的 pool 实现 ftp 连接。 一、背景 简要介绍:业务中一般使用较多的是各种开源组件,设计有点重,因此本文探究一种轻量级的 pool 池的思想实现。 期望:设置连接池最大连接数为 N 时,批量执行 M 个 F…

vs2017/2019串口Qt Serial Port/modbus使用报错

vs2017/2019 Qt Serial Port/modbus配置 /* * 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QModbusTcpClient::QModbusTcpClient(class QObject *)" (__imp_??…

基于javaScript的冒泡排序

目录 一.前言 二.设计思路和原理 三.源代码展示 四. 案例运行结果 一.前言 冒泡排序简而言之,就是一种算法,能够把一系列的数据按照一定的顺序进行排列显示(从小到大或从大到小)。例如能够将数组[5,4,3,2,1]中的元素按照从小到…

了解Maven

一.环境搭建 如果使用的是社区版 版本要求为:2021.1-2022.1.4 如果使用的是idea专业版就无需版本要求,专业版下载私信我,免费教你下载 二,Maven 什么是Maven,也就是一个项目管理工具,用来基于pom的概念&#xff0c…

Ghidra comment add script

init # -*- coding: utf-8 -*- import re from ghidra.program.model.listing import CodeUnit# 获取当前程序和指令迭代器 program getCurrentProgram() listing program.getListing() instructionIterator listing.getInstructions(True)# 用于存储唯一的指令类型和操作数…

PostgreSQL修改最大连接数

在使用PostgreSQL 的时候,经常会遇到这样的错误提示, sorry, too many clients already,这是因为默认PostgreSQL最大连接数是 100, 一般情况下,个人使用时足够的,但是在生产环境,这个连接数是远远不够的&am…

python机器学习5 数据容器

Python中有几个数据容器如下: List,数组,如同Array数组。 Dictionarie,字典,可以通过文字来访问数据。 Sets,序列集,做数学交集、并集等计算时使用。 Tuple,序列&#xff0c…