【数据结构】--- 博主拍了拍你并向你扔了一“棵”二叉树(概念+结构)

news2024/11/25 10:01:13

文章目录

  • 前言
  • 🌟一、树概念及结构:
    • 🌏1.1树的概念:
    • 🌏1.2树的相关概念:
    • 🌏1.3树的表示:
      • 💫1.3.1左孩子右兄弟表示法:
      • 💫1.3.2双亲表示法:
  • 🌟二、二叉树概念及结构:
    • 🌏2.1概念:
    • 🌏2.2特殊二叉树:
      • 💫2.2.1满二叉树:
      • 💫2.2.2完全二叉树:
      • 💫2.2.3特殊二叉树结构图及节点个数:
    • 🌏2.3二叉树性质:
    • 🌏2.4 二叉树的存储结构:
      • 💫2.4.1顺序存储:
      • 💫2.4.2链式存储:
  • 总结


前言

👧个人主页:@小沈熬夜秃头中୧⍤⃝❅
😚小编介绍:欢迎来到我的乱七八糟小星球🌝
📋专栏:数据结构
🔑本章内容:二叉树—概念+结构
送给各位💌:高兴吗上进的主动者.
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~


提示:以下是本篇文章正文内容,下面案例可供参考

🌟一、树概念及结构:

🌏1.1树的概念:

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

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

请添加图片描述

注意树形结构中,子树之间不能有交集,否则就不是树形结构
请添加图片描述

🌏1.2树的相关概念:

请添加图片描述
***节点的度***:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6:B C D E F G
***叶节点或终端节点***:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点
***非终端节点或分支节点***:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点
***双亲节点或父节点***:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点
***孩子节点或子节点***:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
***兄弟节点***:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
***树的度***:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
***节点的层次***:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
***树的高度或深度***:树中节点的最大层次; 如上图:树的高度为4
***堂兄弟节点***:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
***节点的祖先***:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
***子孙***:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
***森林***:由m(m>0)棵互不相交的树的集合称为森林

🌏1.3树的表示:

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既要保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法孩子表示法孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法

💫1.3.1左孩子右兄弟表示法:

  • 左(左代表只指向左边的第一个孩子例如图中A只指向B)孩子右(右代表由左边第一个孩子中的兄弟指针指向它的亲兄弟例如图中B的兄弟指针指向C)兄弟表示法(最优表示方式):如果要找到A所有的孩子只需找到它左边第一个孩子B靠这个孩子去找兄弟C

请添加图片描述
请添加图片描述

💫1.3.2双亲表示法:

  • 双亲表示法(每个位置只存储双亲的指针或者下标)

请添加图片描述

🌟二、二叉树概念及结构:

🌏2.1概念:

一棵二叉树是结点的一个有限集合,该集合:

  • 或者为空
  • 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

请添加图片描述

从上图可以看出

  • 二叉树不存在度大于2的结点(最大是2)
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

注意对于任意的二叉树都是由以下几种情况复合而成的
请添加图片描述

🌏2.2特殊二叉树:

💫2.2.1满二叉树:

  • ***满二叉树***:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。

💫2.2.2完全二叉树:

  • ***完全二叉树***:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。前h-1层都是满的,最后一层可以不满,但是从左到右是连续的

💫2.2.3特殊二叉树结构图及节点个数:

结构图请添加图片描述

高度为h的节点个数(满二叉树):F(N)=2^h-1
高度为h节点个数(完全二叉树):[2 ^ (h-1) , 2 ^ h-1]
请添加图片描述

🌏2.3二叉树性质:

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点.
  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2h -1.
  3. 对任何一棵二叉树, 如果度为0其叶结点个数为 n, 度为2的分支结点个数为m ,则有n =m+1
  4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1) . (ps:log2(n+1)是log以2为底,n+1为对数)
  5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点
若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子

🌏2.4 二叉树的存储结构:

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构

💫2.4.1顺序存储:

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的章节会专门讲解。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树

请添加图片描述
请添加图片描述

💫2.4.2链式存储:

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链,后面课程学到高阶数据结构如红黑树等会用到三叉链

请添加图片描述
请添加图片描述


总结

请添加图片描述
😽Ending,今天的二叉树概念+结构的内容就到此结束啦~,如果后续想了解更多,就请关注我吧,一键三连哦 ~

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

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

相关文章

Golang每日一练(leetDay0069) 数字范围按位与、快乐数

目录 201. 数字范围按位与 Bitwise-and-of-numbers-range &#x1f31f;&#x1f31f; 202. 快乐数 Happy Number &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

美团前高级测试工程师教你如何使用web自动化测试

一、自动化测试基本介绍 1 自动化测试概述&#xff1a; 什么是自动化测试&#xff1f;一般说来所有能替代人工测试的方式都属于自动化测试&#xff0c;即通过工具和脚本来模拟人执行用例的过程。 2 自动化测试的作用 减少软件测试时间与成本改进软件质量 通过扩大测试覆盖率…

python随机生成数据并用双y轴绘制两条带误差棒的折线图

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 Python绘制…

IC验证学习笔记(AHB-RAM)08addr、bsize都随机,主要做地址偏移操作

rkv_ahbram_haddr_word_unaligned_virt_seq: 对addr和bsize都随机化操作 ifndef RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SV define RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SVclass rkv_ahbram_haddr_word_unaligned_virt_seq extends rkv_ahbram_base_virtual_sequenc…

深入探讨桥梁建筑中地质工程与仪器仪表应用

近期&#xff0c;随着桥梁建筑行业的不断发展&#xff0c;地质工程与仪器仪表应用成为了热议的话题。在桥梁、建筑、水利工程等领域&#xff0c;渗压计、MCU自动化测量单元、应变计、测缝计、固定测斜仪等各种先进的仪器仪表技术正在广泛应用&#xff0c;为工程施工和监测提供了…

什么是pytest自动化测试框架?如何安装和使用呢?赶快收藏起来

一、pytest是什么&#xff1f; pytest是一款强大的Python测试工具&#xff0c;可以胜任各种类型或级别的软件测试工作。实际上&#xff0c;越来越多的项目在使用pytest。因为pytest会提供更丰富的功能&#xff0c;包括assert重写、第三方插件&#xff0c;以及其他测试工具无法比…

116.【SpringBoot和Vue结合-图书馆管理系统】

前后端分离 (一)、SpringBootVue概述1.基本概述2.实现技术 (二)、Vue3.x搭建 (SpringBootVue)1.搭建Vue基本环境(1).搭建Vue项目框架(2).介绍Vue项目内容 2.搭建SpringBoot基本环境(1).创建SpringBootTest项目(2).初始化项目(3).测试SpringBoot的控制层 3.通过路由跳转访问组件…

Python+selenium自动化元素定位防踩坑

在自动化UI测试过程中常常会在元素定位阶段就踩坑&#xff0c;碰到困扰已久的问题。 以下是个人整理元素定位报错原因和解决方法。 踩坑一&#xff1a;StaleElementReferenceException selenium.common.exceptions.StaleElementReferenceException: Message: stale element re…

JavaScrip 中的 this, bind, call apply 简述

JavaScrip 中的 this, bind, call & apply 简述 this 是一个比较特殊的东西&#xff0c;基本上可以理解成 this 的指向是就近调用的指向&#xff0c;因此 this 在 JS 中也是一个比较令人困惑的知识点。 之前绕过 this 的方法基本上采用 arrow function&#xff0c;因为 a…

35、Adaptive Forms(3)Data Model

文章目录 35、Adaptive Forms&#xff08;3&#xff09;Data Model配置JDBC安装mysql-connector-j.jar在数据库中创建数据创建Data Model 35、Adaptive Forms&#xff08;3&#xff09;Data Model 在使用Mysql数据之前还需要在AEM中创建DataModel映射数据库的数据结构。也需要…

07-架构2023版-centos+docker部署nacos

1、创建nacos的数据库配置 1.1、创建数据库 1.2、创建用户nacos并授权数据库 参考 06 mysql 创建账户部分内容 1.3、执行数据库脚本 导入官方nacos sql语句。如果是历史有历史数据&#xff0c; 从历史数据sql导入 2、创建 bridge 网络并指定 IP 区间 2.1、创建自定义网络…

选择排序:20年前在谭浩强《c语言程序设计上》学习过(43)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是选择排序&#xff1f; 用Python写段代码&#xff0c;实现插入排序。 选择排序 选择排序是一种简单的排序算…

Contrastive Learning

https://towardsdatascience.com/understanding-contrastive-learning-d5b19fd96607 The Beginner’s Guide to Contrastive Learning Contrastive Representation Learning | LilLog

Visual Studio 怎样设置断点并调试

1-普通断点 设置普通断点的方法很简单&#xff0c;就是在代码行的左边栏灰色区域点击或者把光标放在某代码行&#xff0c;按下 F9。 2-调试 按F5开始调试&#xff0c;按F11是逐行调试&#xff0c;F10是逐过程调试&#xff0c;shiftF5是停止调试。 3-高级调试 见链接&#x…

学系统集成项目管理工程师(中项)系列22b_信息化知识(中)

1. 信息化 1.1. 产品信息化 1.1.1. 信息化的基础 1.2. 企业信息化 1.2.1. 国民经济信息化的基础 1.3. 产业信息化 1.3.1. 【21下选08】 1.4. 国民经济信息化 1.5. 社会生活信息化 1.6. 【22上选08】 1.7. 基本内涵 1.7.1. 信息化的主体是全体社会成员&#xff0c;包…

日语文法PPT截图16-30

16句子的构成 单句 谓语只出现了一次 重句 两个谓语 并且两个谓语是对应的关系 由多个在意义上有差距的小句共同构成的句子 叫复文 用一个句子去修饰一个名词 也是个很典型的复文 被名词化了的句子充当小句&#xff0c;这也是复文的一种情况 引用形式的复文 对于这种复文的…

Java-API简读_java.util.RandomAccess接口(基于JDK1.8)(不涉及源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/130727525 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

史上最详细的SQL盲注入门教程

测试同学在做安全测试时&#xff0c;相信多少都会遇到SQL注入与盲注的漏洞&#xff0c;那么今天我们就来分享下SQL注入与盲注的相关知识&#xff0c;希望对大家有所启发。 一、SQL盲注的定义 SQL注入&#xff0c;简单理解&#xff0c;也就是将用户输的的内容当代码执行了&…

Docker的使用 (1.安装docker)

安装docker前非常重要的准备工作 请保证你的centos 操作系统为至少为7版本请关闭linux的防火墙虚拟机联网&#xff0c;安装好yum工具 安装docker # 设置docker镜像源 yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed…

Aqua 启动管道完整性扫描以检测恶意软件

云原生安全提供商 Aqua Security 已宣布添加管道完整性扫描&#xff0c;以防止软件供应链攻击并确保 CI/CD 管道完整性。 在 eBPF 技术的支持下&#xff0c;Aqua 的管道完整性扫描器实时检测并阻止可疑行为和恶意软件&#xff0c;防止代码篡改并应对软件构建过程中的威胁。 该…