数据结构——认识二叉树

这是一篇回顾二叉树概念的文章

  • 前言:
  • 一、了解树形结构
    • 1.2 树的定义
    • 2.2 树的相关概念
    • 2.2 树的表示形式
  • 二、了解二叉树结构和性质
    • 2.1 什么是二叉树?
    • 2.2 二叉树的性质
    • 2.3 二叉树的遍历
    • 2.3 二叉树的应用范围
    • 2.5 二叉树的优缺点
  • 三、掌握二叉树的存储结构
    • 3.1 二叉树的顺序结构存储
    • 3.2 二叉树的链式结构存储

前言:

一、了解树形结构

1.2 树的定义

树是一种非线性的数据结构,它是由 n ( n>=0 )个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的

在这里插入图片描述

它具有以下的特点:

  • 有一个特殊的结点,称为根结点,根结点没有前驱结点。
  • 除根结点外,其余结点被分成M(M >0)个互不相交的集合T1、T2、…、Tm,其中每一个集合Ti (1 <= i <= m)又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继。
  • 树是递归定义的。

注意:
树形结构中,子树不能有交集,否则不是树形结构。
除了根节点以外,每个节点只能有一个前驱,可以有0个或多个后继。

2.2 树的相关概念

  1. 叶子结点或终端结点:度为0的结点称为叶结点。
  2. 非终端结点或分支结点:度不为0的结点。
  3. 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点。
  4. 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点。
  5. 根结点:一棵树中,没有双亲结点的结点。
  6. 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推
  7. 树的高度或深度:树中结点的最大层次。
  8. 结点的祖先:从根到该结点所经分支上的所有结点。
  9. 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。

下面的概念并不是十分重要,了解即可:

  1. 结点的度:一个结点含有子树的个数称为该结点的度。
  2. 树的度:一棵树中,结点的度的最大称为树的度。
  3. 兄弟结点:具有相同父结点的结点互称为兄弟结点。
  4. 堂兄弟结点:双亲在同一层的结点互为堂兄弟。
  5. 有序树:树中节点的各棵子树T0、T1……都是有序得。
  6. 无序树:树中节点的各棵子树之间的次序是不重要得,可以互相交换位置。
  7. 森林:由m(m>=0)棵互不相交的树组成的集合称为森林

2.2 树的表示形式

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

孩子兄弟表示法:

class Node {
int value ; // 树中存储的数据
Node fifirstChild ; // 第一个孩子引用
Node nextBrother ; // 下一个兄弟引用
}

二、了解二叉树结构和性质

2.1 什么是二叉树?

二叉树是一种数据结构,由节点组成,每个节点最多有两个子节点,分别为左子节点和右子节点。树的最上面的节点称为根节点,没有子节点的节点称为叶子节点。每个非叶子节点都有一个值,称为该节点的数据或关键字。

一个典型的二叉树节点包含以下属性:

  • 数据/关键字
  • 左子节点的指针/引用
  • 右子节点的指针/引用

满二叉树 : 一棵二叉树,如果 每层的结点数都达到最大值,则这棵二叉树就是满二叉树 。也就是说, 如果一棵 二叉树的层数为 K ,且结点总数是 2^k-1 ,则它就是满二叉树 。
完全二叉树 : 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为 K 的,有 n 个结点的二叉树,当且仅当其每一个结点都与深度为K 的满二叉树中编号从 0 至 n-1 的结点一一对应时称之为完全二叉树。

2.2 二叉树的性质

  1. 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1) (i>0)个结点。
  2. 若规定根结点的层数为1,则深度为K的二叉树的最大结点数是2^k-1(一共有多少个结点)
  3. 对任何一棵二叉树, 如果其叶子结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1(度为0的比度为2的永远多一个)
  4. 若规定根结点的层数为1,具有n个结点的满二叉树的深度,h=long2(n+1)(2为底,n+1为指数)
  5. 对具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有结点从0开始编号,则有:
    通过下标任意位置可以找孩子和父亲
    在这里插入图片描述

2.3 二叉树的遍历

前序遍历(Preorder Traversal):

  • 访问根节点
  • 前序遍历左子树
  • 前序遍历右子树

2. 中序遍历(Inorder Traversal):

  • 中序遍历左子树
  • 访问根节点
  • 中序遍历右子树

3. 后序遍历(Postorder Traversal):

  • 后序遍历左子树
  • 后序遍历右子树
  • 访问根节点

2.3 二叉树的应用范围

  1. 数据库系统: 二叉树结构在数据库系统中常用于索引结构,例如二叉搜索树。
  2. 表达式树:用于表示数学表达式,其中每个操作符是树的一个节点,操作数是它的子节点。
  3. 文件系统:文件系统中的目录结构通常可以用树来表示,例如Unix文件系统。
  4. 编译器设计:语法树(语法分析树)是编译器中用于表示源代码结构的一种二叉树。
  5. 网络路由算法: 用于构建路由表,支持高效的数据包转发。

2.5 二叉树的优缺点

优点:
高效的搜索: 二叉树的结构使得搜索操作非常高效,因为每个节点都最多有两个子节点,可以通过比较大小迅速确定搜索方向。
易于排序: 二叉搜索树(BST)的一种形式,能够在插入和删除操作中维护排序。
缺点:
不平衡可能性: 在某些情况下,二叉树可能会退化为链表,导致操作的时间复杂度变为O(n)。
对于特定类型的数据集,性能可能下降: 当数据集合中的数据顺序有序时,二叉树的性能可能变差,因为它将导致树的不平衡。

三、掌握二叉树的存储结构

二叉树的存储结构可以分为两大类:

  • 顺序结构存储
  • 链式结构存储

3.1 二叉树的顺序结构存储

二叉树的顺序存储对二叉树是有一定要求的,普通的二叉树不适合使用顺序存储,会造成空间上的浪费。(二叉树顺序存储,在物理上是一个数组,在逻辑上是一颗二叉树)
如图:
在这里插入图片描述

只有完全二叉树才可以使用顺序存储
如图:
在这里插入图片描述

3.2 二叉树的链式结构存储

二叉树的链式存储结构,顾名思义就是使用链表来表示二叉树,使用链表来表示二叉树的结构,通常是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

关闭 Microsoft Word 2010 配置窗口

关闭 Microsoft Word 2010 配置窗口 References 出现这种问题&#xff0c;主要是安装时所用账户和目前登陆的账户不为同一个账户造成的。或者你进行过覆盖安装或是重新安装过系统&#xff0c;但是 office 的安装目录没有更改。先激活 Microsoft Office&#xff0c;然后执行下列…

springcloud第4季 负载均衡的介绍3

一 loadbalance 1.1 负载均衡的介绍 使用注解loadbalance&#xff0c;是一个客户端的负载均衡器&#xff1b;通过之前已经从注册中心拉取缓存到本地的服务列表中&#xff0c;获取服务进行轮询负载请求服务列表中的数据。 轮询原理 1.2 loadbalance工作流程 loadBalance工作…

-bash: ./1.sh: /bin/bash^M: bad interpreter: No such file or directory解决方法

1、执行脚本 ./1.sh时报如下错误 -bash: ./1.sh: /bin/bash^M: bad interpreter: No such file or directory 2、在Windows编辑的脚本导入Linux系统中&#xff0c;执行报错问题 yum install -y dos2unix 3、或者本地安装 rpm -ivh /mnt/Packages/dos...... 4、然…

opencv各个模块介绍(1)

Core 模块&#xff1a;核心模块&#xff0c;提供了基本的数据结构和功能。 常用的核心函数&#xff1a; cv::Mat&#xff1a;表示多维数组的数据结构&#xff0c;是OpenCV中最常用的类之一&#xff0c;用于存储图像数据和进行矩阵运算。 cv::Scalar&#xff1a;用于表示多通道…

Python综合实战案例-数据清洗分析

写在前面&#xff1a; 本次是根据前文讲解的爬虫、数据清洗、分析进行的一个纵隔讲解案例&#xff0c;也是对自己这段时间python爬虫、数据分析方向的一个总结。 本例设计一个豆瓣读书数据⽂件&#xff0c;book.xlsx⽂件保存的是爬取豆瓣⽹站得到的图书数据&#xff0c;共 6067…

瑞芯微RK3576|触觉智能:开启科技新篇章

更多产品详情可关注深圳触觉智能官网&#xff01; “瑞芯微&#xff0c;创新不止步&#xff01;”——全新芯片RK3576即将震撼登场。指引科技风潮&#xff0c;创造未来无限可能&#xff01;这款芯片在瑞芯微不断创新和突破的道路上&#xff0c;不仅是对过往成就的完美延续&…

填补市场空白,Apache TsFile 如何重新定义时序数据管理

欢迎全球开发者参与到 Apache TsFile 项目中。 刚刚过去的 2023 年&#xff0c;国产开源技术再次获得国际认可。 2023 年 11 月 15 日&#xff0c;经全球最大的开源软件基金会 ASF 董事会投票决议&#xff0c;时序数据文件格式 TsFile 正式通过&#xff0c;直接晋升为 Apache T…

基于傅里叶描述子的手势动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略

AI之Suno&#xff1a;Suno V3的简介、安装和使用方法、案例应用之详细攻略 目录 Suno AI的简介 1、特点与改进&#xff1a; Suno AI的安装和使用方法 1、第一步&#xff0c;让国产大模型—ChatGLM4帮我写一个提示词 2、第二步&#xff0c;将提示词交给Suno v3&#xff0c;…

阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…

FastAPI+React全栈开发02 什么是FARM技术栈

Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…

脚本实现Ubuntu设置屏幕无人操作,自动黑屏

使用 xrandr 命令可以实现对屏幕的控制&#xff0c;包括调整分辨率、旋转屏幕以及关闭屏幕等。要实现 Ubuntu 设置屏幕在无人操作一段时间后自动黑屏&#xff0c;非待机&#xff0c;并黑屏后点击触摸屏可以唤醒屏幕&#xff0c;可以借助 xrandr 命令来实现。 首先&#xff0c;…

docker 本地机 互通文件

查询容器name 查询容器Id 进行传输

从相机空间到像素空间的投影和反投影原理和代码

目录 从相机空间到像素空间的投影 效果 ​编辑 公式 ​编辑 代码 像素空间到相机空间的反投影 记录一下从相机空间到像素空间的投影&#xff08;3D-->2D&#xff09;和像素空间到相机空间的反投影&#xff08;2D-->3D&#xff09;。 推荐blog&#xff1a;SLAM入门之视…

WSL下Ubuntu+RTX4090安装CUDA+cuDnn+Pytorch

安装驱动 首先需要明确的是&#xff0c;在WSL下安装Ubuntu&#xff0c;如果要使用主机的GPU卡&#xff0c;只需要在主机Windows上安装驱动&#xff0c;Linux中不需要安装驱动&#xff0c;可以在Linux中使用nvidia-smi命令查看驱动版本。 安装CUDA 避坑注意事项&#xff1a;如…

【框架】说一说 Fork/Join?

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习Java框架 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情赞助 目录 前言 什么是 Fork&#xff1f; 什么是 Join&#xff1f; Fork/Join 的核心组件 F…

流畅的 Python 第二版(GPT 重译)(二)

第三章&#xff1a;字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins&#xff0c;早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中&#xff0c;也是间接的&#xff0c;因为dict类型是 Python 实现的基本部分。…

酷开系统让用户和电视双向传递,酷开科技实现商业变现

电视在我们的日常生活中扮演着重要的角色。虽然&#xff0c;作为客厅C位的扛把子——电视的娱乐作用深入人心&#xff0c;但是&#xff0c;它的涵义和影响力却因我们每个人的具体生活环境而存在着种种差异&#xff0c;而我们的生活环境又受到我们所处的社会及文化环境的影响。 …

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像&#xff1a;2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标&#xff1a;构建基本的python环境&#xff1a;运行爬虫程序 1.配置阿里云pytho…

B端设计:如何让UI组件库成为助力,而不是阻力。

首发2023-09-24 15:42贝格前端工场 Hi&#xff0c;我是大千UI工场&#xff0c;网上的UI组件库琳琅满目&#xff0c;比如elementUI、antdesign、iview等等&#xff0c;甚至很多前端框架&#xff0c;也出了很多UI组件&#xff0c;如若依、Layui、bootstrap等等&#xff0c;作为U…