当前位置: 首页 > news >正文

【数据结构】——树与二叉树

文章目录

    • 二叉树
      • 二叉树的性质
      • 完全二叉树
      • 二叉树的存储
      • 遍历二叉树和线索二叉树
      • 6.4 树和森林
      • 哈夫曼树
        • 应用

image-20230310163200660

  • 树的定义:树是以分支关系定义的层次结构。

  • D; 树(Tree)是n(n≥0)个结点的有限集。

  • R 数据关系

    有且仅有一个特定的称为根(Root) 的结点

    当n>1时,除根以外的其余结点 可分为m(m>0)个互不相交的有限 集T1, T2 ,… ,Tm ,其中每一个集 合本身又是一棵树,并且称为根 的子树(SubTree)。

  •  只有一个结点——只有一个根结点的树;

  •  有0个结点的树——空树

  • 分支结点: 非终端结点

  • 结点层次指的是结点在树中所处的层次;

  • 堂兄弟指的是具有相同父亲的兄弟结点;

  • 树的深度指的是树中所有结点中最大层数;

  • 有序树指的是树中每个结点的子节点之间具有顺序关系;无序树则相反,子节点之间没有顺序关系;

  • 森林则指由若干棵互不相交的树组成。

  • 孩子指的是一个结点的直接后代;

  • 双亲指的是一个结点的直接前驱;

  • 兄弟指的是具有相同双亲的结点;

  • 祖先指的是从根到某一结点路径上所有结点;

  • 子孙则指某一结点为根的子树中所有结点。

  • 叶子结点指的是度为0的结点;

  • 分支结点指的是度不为0的结点;

  • 内部结点指的是除根节点和叶子节点以外的所有节点;

  • 树的度指的是树中所有结点中最大度数。

二叉树

二叉树(Binary Tree) 是另一种树形结构 特点是每个结点最多只有两棵子树(即二 叉树中不存在度>2的结点) 二叉树的子树有左右之分,其次序不能 任意颠倒

二叉树的性质

  • 性质1 在二叉树的第i层上至多有2i-1个结点(i≥1)

  • 性质2 深度为k的二叉树至多有2k-1个结点(k≥1)

  • 性质3 对任一棵二叉树T,如果其终端结点数为n0,度为2的 结点数为n2,则n0=n2+1

完全二叉树

  • 满二叉树 一棵深度为k且有2k-1个结点的二叉树

image-20230310163351525

  • 深度为k,有n个结点的二叉树,当且仅当其每一个 结点都与深度为k的满二叉树中编号从1至n的结点 一一对应时
    某一结点 有右子树, 则其必有 左子树
  • 叶子结点只可能在层次最大的两层上出现
  • 对任一结点,若其右分支的子孙最大层次为l,则其 左下分支的子孙的最大层次必为l或l+1

image-20230310163540797

  • 性质4 具有n个结点的完全二叉树的深度为 log2 n + 1

  • image-20230310163654665

二叉树的存储

  • 顺序存储结构

image-20230310163844857

  • 链式存储结构

image-20230310164135656

  • 知识点 在含有n个结点的二叉链表中有n+1个空链域

image-20230310164209729

遍历二叉树和线索二叉树

  •  对线性结构而言,顺序遍历;
  •  二叉树是非线性结构,每个结点有两个后继,则存在如 何遍历,即按什么样的搜索路径遍历的问题。

image-20230310164425068

  • 看ppt 有代码实现

二叉树遍历的时间效率和空间效率

基本操作:访问结点Visit()

  • 时间效率:O(n) //每个结点只访问一次
  • 空间效率:O(n) //栈占用的最大辅助空 间

6.4 树和森林

  • 树的存储结构——双亲表示法

  • 利用每个结点只有一个 双亲的性质

  • 采用多重链表,即每个结点设置多个指针域,每个指针域指 向一棵子树的根结点

image-20230310171105505

  • 树林遍历顺序 和 树一样 ( 顺序即为第几棵树的Root结点)

  • 树的存储结构——孩子兄弟表示法 / 二叉树表示法 / 二叉链 表表示法

哈夫曼树

image-20230310174014986

image-20230310173712517

image-20230310175004440

image-20230310175157024

image-20230310175225954

应用

1)二进制编码 : 通信中,可以采用0、1的不同排列来表示不同的字符, 称为二进制编码。 发送端需要将电文中的字符序列转换成二进制的0、1 序列,即编码; 接受端需要把接受的0、1序列转换成对应的字符序列, 即译码。 (左0 右 1)

2} 前缀编码 : 若对某一字符集进行不等长编码,则要求字符集中任一字符的编码都不能是其他字符编码的前缀。符合此要求的编码叫 做前缀编码

相关文章:

【数据结构】——树与二叉树

文章目录树二叉树二叉树的性质完全二叉树二叉树的存储遍历二叉树和线索二叉树6.4 树和森林哈夫曼树应用树 树的定义:树是以分支关系定义的层次结构。 D; 树(Tree)是n(n≥0)个结点的有限集。 R 数据关系 有且仅有一个特定的称为根(Root) 的结点 当n>1时&…...

等离子纳秒高压脉冲电源维修HVP-20 P

等离子纳秒高压脉冲电源维修HVP-20 P;HVP-10B;HVP-05;HVP-02等型号均可维修 HVP-20 P(N)用于气体放电与低温等离子体的高性能纳秒高压脉冲电源。 HVP-20P(N)采用专有的marx电路,实现高压脉冲电源参数的便捷可调,包括峰值电压0 – 20 KV (-2…...

JavaScript内改变this指向

之前我们说的都是代码内 this 的默认指向今天我们要来说一下如何能改变 this 指向也就是说, 你指向哪我不管, 我让你指向哪, 你就得指向哪开局在函数的原型( Function.prototype ) 上有三个方法callapplybind既然是在函数的原型上, 那么只要是函数就可以调用这三个方法&#xf…...

Cobalt Strike---(2)

数据管理 Cobalt Strike 的团队服务器是行动期间Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来 自它的 Beacon payload 的输出,提取出目标、服务和凭据。 如果你想导出 Cobalt Strike 的数据,通过 Reporting → Export Data 。Cobalt Str…...

docker的命令使用和相关例子

Docker是一种流行的容器化平台,可以帮助开发人员更轻松地构建、发布和管理应用程序。下面是一些Docker的命令使用和相关例子: Docker镜像相关命令: 搜索Docker镜像: docker search 例子:docker search ubuntu 下载D…...

23模式--代理模式

本篇主要聊一些23中模型中的代理模式: 看一下百度百科的解释: 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目…...

【Linux】信号的产生、保存、捕捉处理 (四种信号产生、核心存储、用户态与内核态、信号集及其操作函数)

文章目录1、什么是信号?2、信号的产生2.1 通过键盘产生信号2.2 通过系统调用产生信号2.3 硬件异常产生的信号2.4 由软件条件产生的信号2.5 进程的核心转储3、信号的保存4、信号的捕捉4.1 用户态和内核态4.2 用户态到内核态的切换4.3 信号捕捉过程5、信号集操作函数以…...

redis经典五种数据类型及底层实现

目录一、Redis源代码的核心部分1.redis源码在哪里2.src源码包下面该如何看?二、我们平时说redis是字典数据库KV键值对到底是什么1.6大类型说明(粗分)2.6大类型说明3.上帝视角4.Redis定义了redisObject结构体4.1 C语言struct结构体语法简介4.2 字典、KV是什么4.3 red…...

三十而立却被裁,打工人要如何应对职场危机?

又到金三银四就业季,对于部分职场人来说,年龄成为了他们找工作的最大限制。 因为绝大部分企业招聘中层干部以下岗位的时候,都会要求年龄不超过35周岁,再加上每年千万毕业生涌入社会,竞争程度相当激烈,这就导…...

java面试-java基础

char 变量能不能存贮一个中文汉字?为什么? char 变量可以存贮一个汉字,因为 Java 中使用的默认编码是 Unicode ,一个 char 类型占 2 个字节(16 bit),一个汉字是2个字节,所以放一个中…...

Kafka 消息不丢失

Kafka 消息不丢失生产者丢失消费者丢失不丢失配置Kafka 保证消息不丢失:只对已提交的消息 (committed message) 做有限度的持久化保证 已提交的消息:当 n 个 Broker 成功接收到该消息并写入到日志文件后,就告诉生产者该消息已成功提交有限度…...

ASEMI高压MOS管10N65参数,10N65规格,10N65封装

编辑-Z ASEMI高压MOS管10N65参数: 型号:10N65 漏极-源极电压(VDS):650V 栅源电压(VGS):30V 漏极电流(ID):10A 功耗(PD&#xff…...

LeetCode-416. 分割等和子集

目录题目分析回溯法动态规划动态规划(压缩)题目来源 416. 分割等和子集 题目分析 这道题目是要找是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 那么只要找到集合里能够出现 sum / 2 的子集总和,就算是可以分割成两个相同元素和子集了…...

2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2021.05.09】

一、试题A:求余(本题总分:5 分) 得:5分 本题总分:5 分 【问题描述】 在 C/C/Java/Python 等语言中,使用 % 表示求余,请问 2021%20 的值是多少? 【答案提交】 这是一道结果…...

elasticSearch写入原理

elasticSearch写入原理 最近学习完了es相关的课程整理除了es的核心内容,学习这东西知其然知其所以然,自己按照自己的理解整理了es相关的面试题。先热个身,整理一下es的写入原理,有不对的地方请大家指正。 这些原理的东西我觉得还是…...

第十四届蓝桥杯模拟赛(第三期)Python

1 进制转换 问题描述   请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。   请将这个数的十进制形式作为答案提交。 答案:2730 def ch…...

Pytorch模型参数的保存和加载

目录 一、前言 二、参数保存 三、参数的加载 四、保存和加载整个模型 五、总结 一、前言 在模型训练完成后,我们需要保存模型参数值用于后续的测试过程。由于保存整个模型将耗费大量的存储,故推荐的做法是只保存参数,使用时只需在建好模…...

面试热点题:回溯算法之组合 组合与组合总和 III

什么是回溯算法? 回溯算法也可以叫回溯搜索算法,回溯是递归的"副产品",回溯的本质是穷举,然后选出我们需要的数据,回溯本身不是特别高效的算法,但我们可以通过"剪枝"来优化它。 理解回溯算法 回溯…...

java面试-jvm

JVM JVM 是 java 虚拟机,简单来说就是能执行标准 java 字节码的虚拟计算机 JVM 是如何工作的 首先程序在执行之前先要把 Java 代码(.java)转换成字节码(.class),JVM 通过类加载器(ClassLoade…...

vscode下载与使用

1.vscode下载 官网下载地址:Download Visual Studio Code - Mac, Linux, Windows下载太慢,推荐文章:解决VsCode下载慢问题_vscode下载太慢_迷小圈的博客-CSDN博客下载太慢,推荐下载链接:https://vscode.cdn.azure.cn/s…...

Bili2text完全指南:5分钟实现B站视频转文字稿的免费神器

Bili2text完全指南:5分钟实现B站视频转文字稿的免费神器 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了一段精彩的B站视频内容&am…...

车间设备实时监控难在哪?边缘计算网关才是答案

某家年产值过亿的机械加工厂。生产车间里六十八台设备。数控车床、加工中心、磨床、冲压机,品牌五花八门。老板花了四十万上了MES系统。结果呢。数据还是靠人抄。每两小时巡一次线,拿手写板记设备状态。设备编号、运行时间、报警代码,全部手填…...

用一颗6脚5050RGB,我复刻了同事那个超省资源的跑马灯+呼吸灯方案

用一颗6脚5050RGB复刻超省资源跑马灯呼吸灯方案 在嵌入式开发中,资源受限的单片机往往需要开发者发挥创意才能实现复杂功能。最近我遇到一个有趣案例:同事用极简的硬件设计实现了跑马灯与呼吸灯的组合效果,仅用一颗6脚5050RGB LED和基础三极管…...

别再手动搬运数据了!手把手教你用DSP28335的DMA高效搬运ADC采样结果

DSP28335 DMA技术实战:构建零CPU干预的ADC数据流水线 在嵌入式系统开发中,ADC采样数据的实时处理一直是性能优化的关键瓶颈。传统的中断或轮询方式不仅消耗宝贵的CPU周期,还可能因响应延迟导致数据丢失。本文将揭示如何利用DSP28335的DMA控制…...

从Linux SELinux到Windows Mandatory Integrity Control:聊聊BLP/Biba模型在现代系统中的实战身影

从Linux SELinux到Windows强制完整性控制:BLP/Biba模型在现代系统中的实战解析 在操作系统安全领域,理论模型与实际实现之间往往存在巨大鸿沟。BLP(Bell-LaPadula)和Biba这两个诞生于上世纪的安全模型,至今仍在主流系统…...

别再死磕协议文档了!用Python模拟FiRa UWB测距的Hopping序列(附完整代码)

用Python实战解析FiRa UWB测距中的Hopping序列生成逻辑 在物联网和嵌入式开发领域,超宽带(UWB)技术因其厘米级精度的测距能力而备受关注。FiRa联盟制定的UWB标准中,Round Hopping机制是确保测距可靠性的关键技术之一,但协议文档中复杂的数学…...

数据结构面试官最爱问的10个问题,我帮你整理好了(附详细答案)

数据结构面试高频10题解析:从原理到实战技巧 在技术面试中,数据结构问题往往是考察候选人基本功的核心环节。无论是校招还是社招,面试官都倾向于通过这些问题评估应聘者的逻辑思维、编码能力和计算机科学素养。本文将深入剖析面试中最常出现的…...

周红伟:机器人和手机一样便宜,2.69万!宇树最便宜人形机器人来了,王兴兴化身价格屠夫,这下我真买得起了

机器人和手机一样便宜宇树发布其迄今定价最低的人形机器人——R1系列双臂人形机器人,支持工业及日常家用多元场景应用,售价2.69万元起。这是宇树首款主打桌面、面向工业场景的低成本轻量化上半身双臂方案。该系列机器人支持5/7自由度单臂、固定/移动底盘…...

如何在c语言项目中通过curl调用Taotoken聚合大模型接口

如何在C语言项目中通过curl调用Taotoken聚合大模型接口 1. 准备工作 在C语言项目中通过libcurl调用Taotoken的OpenAI兼容接口,需要确保开发环境已安装libcurl库及其开发头文件。Linux系统可通过包管理器安装,例如在Ubuntu上执行sudo apt-get install l…...

2026年AI招聘工具深度测评:世纪云猎与递航AI技术路线与应用场景全景解析

在2026年的企业数字化转型浪潮中,AI招聘工具的选型已经从简单的功能对比,升级为底层架构与业务生态的深度考量。当前市场上,世纪云猎与递航(Dhunting)作为两款备受关注的AI招聘产品,分别代表了两种截然不同…...