LeetCode算法题-Quad Tree Intersection(Java实现)

Java实现四叉树 四叉树(Quadtree)是一种常用的数据结构,它可以高效地存储和查询二维空间中的数据。它将二维空间划分为四个象限,并在每个象限上递归地构建子树,直到满足某个终止条件。本文将介绍如何使用Java实现四叉树,并提供相应的源代码。使用四叉树可以高效地存储和查询二维空间中的数据。通过递归地划分空间,可以快速定位数据,并减少不必要的计算。首先,我们定义一个QuadtreeNode类,该类表示四叉树的节点。每个节点包含一个矩形范围、一个存储数据的列表以及指向四个子节点的引用。如果子节点为空,则表示该节点是叶子节点。 阅读详情

这是悦乐书的第260次更新,第273篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第127题(顺位题号是558)。四叉树是树数据,其中每个内部节点恰好有四个子节点:topLeft,topRight,bottomLeft和bottomRight。四叉树通常用于通过递归地将二维空间细分为四个象限或区域来划分二维空间。

我们想在我们的四叉树中存储true/false。四叉树用于表示N * N布尔网格。对于每个节点,它将被细分为四个子节点,直到它所代表的区域中的值全部相同。每个节点都有另外两个布尔属性:isLeaf和val。当且仅当节点是叶节点时,isLeaf才为真。叶节点的val属性包含它所代表的区域的值。

例如,下面是两个四叉树A和B:

A:
+-------+-------+   T: true
|       |       |   F: false
|   T   |   T   |
|       |       |
+-------+-------+
|       |       |
|   F   |   F   |
|       |       |
+-------+-------+
topLeft: T
topRight: T
bottomLeft: F
bottomRight: F

B:               
+-------+---+---+
|       | F | F |
|   T   +---+---+
|       | T | T |
+-------+---+---+
|       |       |
|   T   |   F   |
|       |       |
+-------+-------+
topLeft: T
topRight:
     topLeft: F
     topRight: F
     bottomLeft: T
     bottomRight: T
bottomLeft: T
bottomRight: F

您的任务是实现一个将需要两个四叉树并返回表示两棵树的逻辑OR(或并集)的四叉树的函数。

A:                 B:                 C (A or B):
+-------+-------+  +-------+---+---+  +-------+-------+
|       |       |  |       | F | F |  |       |       |
|   T   |   T   |  |   T   +---+---+  |   T   |   T   |
|       |       |  |       | T | T |  |       |       |
+-------+-------+  +-------+---+---+  +-------+-------+
|       |       |  |       |       |  |       |       |
|   F   |   F   |  |   T   |   F   |  |   T   |   F   |
|       |       |  |       |       |  |       |       |
+-------+-------+  +-------+-------+  +-------+-------+

注意:

  • A和B都表示大小为N * N的网格。

  • N保证是2的幂。

  • 如果您想了解有关四叉树的更多信息,可以参考其维基。

  • 逻辑OR运算定义如下:如果A为true,或者如果B为true,或者如果A和B都为true,则“A或B”为true。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 解题

题目描述了一种新的数据结构,四叉树,要求计算出两个四叉树的并集,以一个新的四叉树作为结果返回。

一个四叉树含多个内部节点,每个内部节点拥有四个子节点,每个节点拥有两个属性isLeaf和val,只有四个子节点都是叶子节点时,该节点本身的isLeaf属性才会为true,只有四个子节点的值都相同(都为true或false)时,该节点本身的val属性才会为true或false,与其四个子节点的val值等同。

我们直接使用递归,如果quadTree1活着quadTree2是叶子节点,并且其val属性为true,直接返回quadTree1或quadTree2。如果都不是叶子节点,那么就对其四个子节点作为参数,调用自身,进行二次操作,返回的节点组成新的节点的子节点,接着计算新节点的两个属性isLeaf和val,最后返回该新节点即可。在本题中,我们直接使用quadTree1作为新的节点,当然,你也可以创建一个新的Node对象来承接。

public Node intersect(Node quadTree1, Node quadTree2) {
    if (quadTree1.isLeaf) {
        return quadTree1.val ? quadTree1 : quadTree2;
    }
    if (quadTree2.isLeaf) {
        return quadTree2.val ? quadTree2 : quadTree1;
    }
    quadTree1.topLeft = intersect(quadTree1.topLeft, quadTree2.topLeft);
    quadTree1.topRight = intersect(quadTree1.topRight, quadTree2.topRight);
    quadTree1.bottomLeft = intersect(quadTree1.bottomLeft, quadTree2.bottomLeft);
    quadTree1.bottomRight = intersect(quadTree1.bottomRight, quadTree2.bottomRight);
    if (quadTree1.topLeft.isLeaf && quadTree1.topRight.isLeaf
            && quadTree1.bottomLeft.isLeaf && quadTree1.bottomRight.isLeaf
            && quadTree1.topLeft.val == quadTree1.topRight.val
            && quadTree1.topRight.val == quadTree1.bottomLeft.val
            && quadTree1.bottomLeft.val == quadTree1.bottomRight.val) {
        quadTree1.isLeaf = true;
        quadTree1.val = quadTree1.topLeft.val;
    }
    return quadTree1;
}

03 小结

算法专题目前已日更超过三个月,算法题文章127+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

java实现四叉树(附完整源码) 阅读详情

相关推荐

Java:实现一个四叉树(整数坐标)算法(附完整源码)

Java:实现一个四叉树(整数坐标)算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 759

427. Construct Quad Tree

利用一个四叉树存储一个布尔网格。

不积跬步无以至千里 3150

QuadTree:四叉树实现

QuadTree索引。 QuadTree索引的Java实现。 QuadTree索引假设:索引范围是整个世界使用maxCapacity Integer创建QuadTree,该整数是Items的最大数量(此实现为DataEntry)。 班级 GeoLocation:使用经度和纬度表示地图上的点。 DataEntry:索引对象,为简单起见,DataEntry仅具有ID和位置。 QuadTreeNode:QuadTree中的Node(Quad),每个Node具有边界框,叶子节点(如B +树)中存储4个子节点(如果是内部节点)或零个子节点(如果是叶节点)数据。 QuadTree:具有索引和搜索功能的QuadTree Indexer。 索引功能: 为了获得良好的性能,请使用批量加载而不是分别索引单个数据或索引大量数据。 为什么? 在插入一些物品后进行遮阳比在插入每个物品后进行更好。 搜索功能

QuadTree

QuadTree

an13654067079的博客 281

Quadtree:Java中的四叉树实现

四叉树 这是Quadtree的Java实现,Quadtree是一种树数据结构,可用于存储2D位置数据。 用法 创建新的四叉树 从点(0,0)开始以400 x 400尺寸初始化世界 // init. Dimension dimension = new Dimension ( 400 , 400 ); Position2D position = new Position2D ( 0 , 0 ); QuadTree< Point> KD = new QuadTree< Point> (position, dimension); // populate with random points. Random random = new Random (); List< Point> pointList = new LinkedList<> (); for ( int i = 0 ;

QuadTree四叉树实现代码 C#

这个代码是一个四叉树的C#实现,使用四叉树文成一个可视项目。四叉树是一种树结构可以用于编码和2D碰撞检测。多用在2D碰撞检测中,在大量的碰撞检测中可以提高效率,但结构略复杂。

quadtree java_LeetCode算法题-Quad Tree Intersection(Java实现)

这是悦乐书的第260次更新,第273篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第127题(顺位题号是558)。四叉树是树数据,其中每个内部节点恰好有四个子节点:topLeft,topRight,bottomLeft和bottomRight。四叉树通常用于通过递归地将二维空间细分为四个象限或区域来划分二维空间。我们想在我们的四叉树中存储true/false。四叉树用于表...

weixin_39849762的博客 198

用java实现的四叉树编码源码

从文件读取四叉树结点,按照morton码对四叉树进行编码

【Leetcode刷题笔记】558. Quad Tree Intersection 四叉树求OR

A quadtree is a tree data in which each internal node has exactly four children: topLeft, topRight, bottomLeft and bottomRight. Quad trees are often used to partition a two-dimensional space by recurs...

知吾朱期应庆的博客 234

具有PWM控制VSC-HVDC链路的IEEE30总线传输系统(Simulink仿真实现)

内容概要:本文构建了一个包含PWM控制VSC-HVDC链路的IEEE30节点电力传输系统,并基于Simulink平台完成了系统的建模仿真。该模型聚焦于高压直流输电(HVDC)技术在区域电网互联中的应用,采用电压源型换流器(VSC)与脉宽调制(PWM)技术实现高效、灵活的电能传输。研究重点在于分析VSC-HVDC链路在复杂多节点电网中对潮流分布、系统稳定性及电能质量的调控能力,特别关注其在区域电网互联、新能源大规模接入以及跨区域电力交换等场景下的动态响应特性与控制性能,为现代智能电网的发展提供技术支撑与仿真验证手段。; 适合人群:具备电力系统、电气工程或自动化等相关专业背景的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究VSC-HVDC在多节点电网(如IEEE30节点)中的建模与仿真方法;②分析PWM控制策略下HVDC链路对电网潮流分布、电压稳定性和故障穿越能力的影响;③为区域电网互联、新能源并网及智能电网调度等课题提供仿真基础和技术验证。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者在掌握电力电子技术和电力系统分析基础知识的前提下,结合仿真模型深入理解VSC-HVDC的工作原理与控制策略。在学习过程中,应着重关注模型参数设置、控制环路设计及仿真结果的分析,以达到理论与实践相结合的目的。

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析,RDA的实现路径也有很多,今天介绍一下CANOCO软件的实现方法。1.不同样点和环境因子之间夹角是锐角 是正相关,是钝角是负相关。2.夹角越大 说明相关性较小,夹角越小,相关性越大。得有不同的物种或者样点数值,再加上环境因子数据。3.箭头越长 相关性越大。时间调整到2010年。

Along6的博客 1万+

quadtree java_LeetCode算法题-Construct Quad Tree(Java实现)

这是悦乐书的第224次更新,第237篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427)。我们想使用四叉树来存储N×N布尔网格。网格中的每个单元格只能是true或false。根节点表示整个网格。对于每个节点,它将被细分为四个子节点,直到它所代表的区域中的值都相同。每个节点都有另外两个布尔属性:isLeaf和val。当且仅当节点是叶节点时,isLeaf...

weixin_30474629的博客 270

从CMT2300A实战出发:Sub1G射频匹配电路设计要点与315MHz应用详解

本文从CMT2300A芯片实战出发,详细解析Sub1G射频匹配电路设计要点,特别针对315MHz应用场景。内容涵盖频段划分逻辑、调制方式选择、晶体振荡器设计等基础认知,以及315MHz匹配电路物料选型、巴伦网络处理等实战技巧,并分享PCB布局防干扰设计和实测验证方法,助力开发者优化射频通信性能。

weixin_29238147的博客 166

四叉树 java实现,数据结构与算法--四叉树(javascript实现)

最近想要研究研究webgl地形的渲染,然后就想起了四叉树,在网上看了一篇相关的文章,准备拿javascript实现一下备用。四叉树原理(这部分就直接抄了,见参考)四叉树(Q-Tree)是一种树形数据结构。四叉树的定义是:它的每个节点下至多可以有四个子节点,通常把一部分二维空间细分为四个象限或区域并把该区域里的相关信息存入到四叉树节点中。这个区域可以是正方形、矩形或是任意形状。以下为四叉树的二维空间...

weixin_34180753的博客 615

数据驱动的细胞动力学:从高通量成像到机器学习预测的完整实践指南

细胞动力学研究细胞群体随时间变化的规律和命运决策机制,是理解生命过程的基础。其核心原理在于将传统的定性观察转化为定量分析,通过高通量成像、单细胞测序等技术获取多维时序数据,并运用机器学习与统计模型挖掘数据中的深层模式。这一技术价值在于实现从“描述现象”到“预测行为”的范式转变,显著提升研究的客观性和可重复性。在应用场景上,它广泛应用于药物筛选、疾病机制研究和发育生物学等领域,能够加速靶点发现和疗效评估。本文聚焦于数据驱动的细胞动力学分析,详细拆解了从实验设计、图像处理、单细胞追踪到特征工程与建模预测的端到端

weixin_29056781的博客 269

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由嵌套下keep-alive缓存失效的根本原因,并提供了三种实战解决方案。通过剖析组件树、router-view与keep-alive的协作机制,揭示了缓存无法穿透多层router-view的技术本质。文章对比了路由扁平化重构、状态管理配合路由守卫以及使用社区插件等方案的优缺点与适用场景,为开发者解决这一常见难题提供了清晰的选型指导。

weixin_29001423的博客 273

LeetCode 四叉树交集

四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft、topRight、bottomLeft 和 bottomRight。四叉树通常被用来划分一个二维空间,递归地将其细分为四个象限或区域。 我们希望在四叉树中存储 True/False 信息。四叉树用来表示 N * N 的布尔网格。对于每个结点, 它将被等分成四个孩子结点直到这个区域内的值都是相同的。每个节点都有另外两个布尔属性:isL...

hestyle的博客 597

汽车级智能栅极驱动器深度解析 | 连载01:DRV871x-Q1系列产品架构与核心特性

集成度:单芯片集成多通道驱动器、电源管理、电流检测智能化:自适应控制算法,减少外部元件可靠性:多重保护机制,满足汽车级要求灵活性:SPI和硬件两种接口,适应不同应用需求。

VehSwHwDeveloper的博客 1155

LeetCode - 558 - 四叉树交集(quad-tree-intersection)

今日份有两道题,四叉树为第一道,第二道请移步公众号翻阅。如想获取更多,请【点击原文】进入 GitHub 或者翻阅公众号历史一 目录 不折腾的前端,和咸鱼有什么区别目录一 ...

weixin_41806099的博客 267

ROS下UR+Realsense相机进行手眼标定

手眼标定主要是用来确定相机坐标系和机械臂坐标系之间的转换关系,从而实现后续的抓取等任务。

weixin_42157689的博客 7576

RapidScada在windows下的安装(详细)

1.下载地址:RapidScada官网 2.版本说明 有Linux版本和Windows版本,看自己的需求下载,推荐下载最新稳定版本。 3.系统要求 4.安装前的准备(windows10) 首先打开Windows功能: 先关闭 Microsoft .NET Framework3.5的 Windows Communication Foundation 子组件。如下图: Microsoft .NET Framework配置按下图勾选: iis安装的功能: 5.安装 解压..

m0_51275803的博客 4265

leetcode 558 四叉树交集

题目描述 二进制矩阵中的所有元素不是 0 就是 1 。 给你两个四叉树,quadTree1 和 quadTree2。其中 quadTree1 表示一个 n * n 二进制矩阵,而 quadTree2 表示另一个 n * n 二进制矩阵。 请你返回一个表示 n * n 二进制矩阵的四叉树,它是 quadTree1 和 quadTree2 所表示的两个二进制矩阵进行 按位逻辑或运算 的结果。 注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受

qq_41202486的博客 270

从原理到落地:Mamba-YOLOv8 全面实战指南(源码 + 训练 + 部署一次学会)

在目标检测领域,CNN与Transformer的较量从未停歇。本文提出一种革命性的架构——,将状态空间模型(SSM)首次引入YOLO框架。实验表明,该模型在COCO数据集上达到54.3% mAP@0.5,推理速度达89 FPS(RTX 4090),相比原版YOLOv8提升12.7%精度与23%速度。本文将完整揭示其技术原理与工程实现,助您掌握这一前沿技术。

FJN110的博客 121

Segment-Anything模型下载太慢?国内镜像加速与轻量级模型实测指南

本文针对Segment-Anything模型下载慢的问题,提供了国内镜像加速与轻量级部署的完整解决方案。从环境配置、代码仓库克隆到模型下载优化,详细介绍了适合不同硬件配置的安装教程和实测数据,帮助开发者高效部署AI模型。

weixin_30439067的博客 437

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[LeetCode] Quad Tree Intersection 四叉树相交

  A quadtree is a tree data in which each internal node has exactly four children: topLeft, topRight, bottomLeft and bottomRight. Quad trees are often used to partition a two-dimensional space by rec...

weixin_33814685的博客 174

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: LeetCode算法题-Reverse Words in a String III(Java实现)
下一篇: LeetCode算法题-Maximum Depth of N-ary Tree(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值