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

【LeetCode】七、树、堆、图

文章目录

  • 1、树结构
  • 2、二叉树
  • 3、二叉树的遍历
  • 4、堆结构(Heap)
  • 5、堆化
  • 6、图

1、树结构

节点、根节点、叶子节点:

在这里插入图片描述

高度、深度、层三者的示意图:

在这里插入图片描述

2、二叉树

相比其他树,二叉树即每个节点最多两个孩子(两个分支):
在这里插入图片描述

如下图:满二叉树一定是完全二叉树,完全二叉树却不一定是满二叉树

在这里插入图片描述

补充:上面对满二叉树的定义不准确,满二叉树还要满足:所有的叶子节点在同一层

在这里插入图片描述

以上这个,虽然满足:除了叶子节点,每个节点都有两个孩子,但不满足所有叶子节点都在同一层,因此不是满二叉树。

3、二叉树的遍历

  • 前序遍历,即根节点在前:前左右
  • 中序遍历,即根节点在中:左中右
  • 后序遍历,即根节点在后:左右后
    在这里插入图片描述

如下:整个树看成三块,A、A的左子树、A的右子树,在两块子树里,继续按中序的左根右遍历,结果就是:D ⇒ B ⇒ E ⇒ A ⇒ F ⇒ C ⇒ G

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

同理,如果下面还有,那就继续分:

在这里插入图片描述

一句话,从根节点入手,把整个树看成左、根、右三大块,按左根右中序遍历,左右每块子树里,按子树的根节点继续分成左、根、右三大块,每块子树里依旧按照左根右中序遍历

4、堆结构(Heap)

堆即一种二叉树:完全二叉树。前面提到完全二叉树即从上到下、从左到右依次填满的二叉树,即可以左上有节点而右下无节点(图A、B),但:

  • 不能同一层左边无节点,但右边有节点(图C),这样不满足从左到右,不是完全二叉树
  • 不能同一层,左边有节点,但右边无节点,但下一层左边又有节点(图D),这样不满足从上到下,不是完全二叉树

在这里插入图片描述
堆有两个特点:

  • 首先得是一个完全二叉树
  • 其次,每个节点 >= 其所有孩子节点 (最大堆),或, 每个节点 <= 其所有孩子节点 (最小堆)

对最大堆,堆顶元素是整个堆的最大值,对最小堆,堆顶元素是整个堆的最小值

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

堆的时间复杂度:

在这里插入图片描述

比如删除一个最小堆的根节点:

在这里插入图片描述
干掉1以后,把右下角的7放上来,先保持完全二叉树的结构:

在这里插入图片描述
再向下比较,把7放到该放的位置。这是个最小堆,因此,先将7和最小的孩子节点2交换:

在这里插入图片描述
又发现7比孩子节点4和5打,因此,再把7和最小的孩子节点4交换,删除完成:

在这里插入图片描述

5、堆化

堆化,即把一组无序的数加到堆里去。可先把一组数转成完全二叉树,再将完全二叉树调整为最大堆或者最小堆。

如下,一个数组转为一个完全二叉树,其结果是唯一的(遍历数组,从上到下、从左到右的摆放),即0号元素当根节点,后面两个1、2号元素当根节点的左右子节点,3、4、5、6号元素分别当1、2号元素所在节点的左右子节点
在这里插入图片描述

将这个二叉树转为最小堆,核心思想是:把每个节点和其孩子节点进行对比,看每个节点是否满足:值小于等于任何它的一个子节点,不满足时,则把该节点和其最小的孩子节点交换

因为叶子节点没有子节点,所以从倒数第二层开始看:9和7两个节点,9符合条件,均小于其两个子节点,7则不符,因此,7和5交换:

在这里插入图片描述

交换完成,再往上看上一层:10 > 5 也 10 > 9,选更小的5这个节点交换:

在这里插入图片描述
同理,换完后,第二层不再满足最小堆,需要再交换,10 > 8 也有 10 > 7,选最小的7这个节点进行交换。

6、图

和树的父子关系相比,图则类似邻居关系。对于图,有一个度的概念(degree),如下,顶点上有两条边与其相连,该顶点的度为2
在这里插入图片描述
分类:

在这里插入图片描述
前面提到了顶点的度,对于有向图,则是:

  • 入度:指向该顶点的边的数量
  • 出度:从该顶点出发的边的数量

如下:丁节点,入度为2,出度为0

在这里插入图片描述
再说权重图:如下,求杭州到北京的最短路径

在这里插入图片描述

相关文章:

【LeetCode】七、树、堆、图

文章目录 1、树结构2、二叉树3、二叉树的遍历4、堆结构&#xff08;Heap&#xff09;5、堆化6、图 1、树结构 节点、根节点、叶子节点&#xff1a; 高度、深度、层三者的示意图&#xff1a; 2、二叉树 相比其他树&#xff0c;二叉树即每个节点最多两个孩子&#xff08;两个分…...

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…...

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…...

js,uni 自定义 时间选择器 vue2

<template><view class"reserve-time-box"><view class"title">选择时间</view><view class"date-box"><view class"date-scroll-box" :style"{ width : ${dataTimeWidth}rpx }"><v…...

搜索引擎的原理与相关知识

搜索引擎是一种网络服务&#xff0c;它通过互联网帮助用户找到所需的信息。搜索引擎的工作原理主要包括以下几个步骤&#xff1a; 网络爬虫&#xff08;Web Crawler&#xff09;&#xff1a;搜索引擎使用网络爬虫&#xff08;也称为蜘蛛或机器人&#xff09;来遍历互联网&#…...

React:tabs或标签页自定义右击菜单内容,支持内嵌iframe关闭菜单方案

React&#xff1a;tabs或标签页自定义右击菜单内容&#xff0c;支持内嵌iframe关闭菜单方案 不管是react、vue还是原生js&#xff0c;原理是一样的。 注意如果内嵌iframe情况下&#xff0c;iframe无法使用事件监听&#xff0c;但是可以使用iframe的任何点击行为都会往父级wind…...

Taro +vue3 中的微信小程序中的分享

微信小程序 右上角分享 的触发 以及配 useShareAppMessage(() > {return {title: "电影属全国通兑券",page: /pages/home/index,imageUrl: "http:///chuanshuo.jpg",};}); 置 就是Taro框架中提供的一个分享Api 封装好的...

视频监控EasyCVR视频汇聚/智能边缘网关:EasySearch无法探测到服务器如何处理?

安防监控EasyCVR智能边缘网关/视频汇聚网关/视频网关属于软硬一体的边缘计算硬件&#xff0c;可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时…...

openlayer 鼠标点击船舶,打开船舶简单弹框

背景&#xff1a; 对创建的地图对象&#xff0c;可以添加上监听事件&#xff0c;常用的有&#xff1a;地图点击事件、鼠标移动事件。 通过监听这些事件&#xff0c;又可以区分不同图层的不同要素&#xff0c;获取不同数据&#xff1b; 根据这些数据&#xff0c;又可以发起网络请…...

数据挖掘常见算法(关联)

Apriori算法 Apriori算法基于频繁项集性质的先验知识&#xff0c;使用由下至上逐层搜索的迭代方法&#xff0c;即从频繁1项集开始&#xff0c;采用频繁k项集搜索频繁k1项集&#xff0c;直到不能找到包含更多项的频繁项集为止。 Apriori算法由以下步骤组成&#xff0c;其中的核…...

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档&#xff1a;https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址&#xff1a;https://github.com/Hufe921/canvas-editor 前提声明&#xff1a; 由于CanvasEditor目前不支持vue、react 等框架开箱即用版&#xff0c;所以…...

Redis Stream Redisson Stream

目录 一、Redis Stream1.1 场景1&#xff1a;多个客户端可以同时接收到消息1.1.1 XADD - 向stream添加Entry&#xff08;发消息 &#xff09;1.1.2 XREAD - 从stream中读取Entry&#xff08;收消息&#xff09;1.1.3 XRANGE - 从stream指定区间读取Entry&#xff08;收消息&…...

threadX netx 设置IP地址以及获取IP地址

ThreadX 是一个实时操作系统&#xff08;RTOS&#xff09;内核&#xff0c;而 NetX 则是 Express Logic 提供的一个嵌入式 TCP/IP 网络栈&#xff0c;它经常与 ThreadX 一起使用来提供网络功能。在 ThreadX 和 NetX 中设置和获取 IP 地址通常涉及几个步骤。 设置 IP 地址 初始…...

计算机毕业设计hadoop+spark+hive知识图谱医生推荐系统 医生数据分析可视化大屏 医生爬虫 医疗可视化 医生大数据 机器学习 大数据毕业设计

测试过程及结果 本次对于医生推荐系统测试通过手动测试的方式共进行了两轮测试。 &#xff08;1&#xff09;第一轮测试中执行了个20个测试用例&#xff0c;通过16个&#xff0c;失败4个&#xff0c;其中属于严重缺陷的1个&#xff0c;属于一般缺陷的3个。 &#xff08;2&am…...

lammps已经运算结束,有数据忘记算:rerun 命令

需要的文件 1、模拟运算的所有文件&#xff08;模型 、in文件、力场文件&#xff09; 2、模拟计算所得到的dump文件&#xff08;原子轨迹文件&#xff09; rerun命令的使用&#xff08;修改in文件&#xff09; 1、删除or注释掉 输出dump文件的那一行命令 2、加上需要补充计…...

CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行&#xff0c;其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API&#xff0c;您必须通过 PIP 安装该模块&#xff1a; pip3 install carla-simulator # Python 3World and client 客…...

华为HCIP Datacom H12-821 卷16

1.判断题 在 VRRP 中,当设备状态变为 Master 后,,会立刻发送免费 ARP 来刷新下游设备的 MAC 表项,从而把用户的流量引到此台设备上来 A、对 B、错 正确答案: A 解析: 2.判断题 路由选择工具 route- policy 能够基于预先定义的条件来进行过滤并设置 BGP...

Python学习打卡:day17

day17 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day17121、Python 操作 MySQL 基础使用pymysql创建到 MySQL 的数据库链接执行 SQL 语句执行非查询性质的SQL语句执行查询性质的SQL语句 122、Pyth…...

Spring Cloud Gateway 与 Nacos 的完美结合

在现代微服务架构中&#xff0c;服务网关扮演着至关重要的角色。它不仅负责路由请求到相应的服务&#xff0c;还承担着诸如负载均衡、安全认证、限流熔断等重要功能。Spring Cloud Gateway 作为 Spring Cloud 生态系统中的一员&#xff0c;以其强大的功能和灵活的配置&#xff…...

vue2 element ui 表单 动态增加表单项 表单项值不可重复 select多选

案例 <template><el-form :model"form" ref"form" label-width"70px"><el-form-item><el-button icon"el-icon-plus" type"primary" plain click"add">新增</el-button><el-b…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...