leetcode 427. Construct Quad Tree(构建四叉树)

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

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

刚看到题的时候是懵的,这也太长了。到底是要表达什么呢。
不妨把这个矩阵看成一个正方形的图片,想象你在处理图片,从整体逐步到局部。

刚开始看一整张图片,如果是全0或全1,这个就是叶子节点,怎么表达叶子节点呢,就是isLeaf=true, val=0 or 1(全0 or 全1),
这个isLeaf和val会组成一个Node.

如果不是全0或全1,那就不是叶子节点,就要把图片等分成4块,左上的一块叫topLeft, 右上的一块叫topRight,
同理bottomLeft, bottomRight,
这4块按同样的方法再进入下一轮:
全0或全1就是叶子节点,否则再细分成4小块,再处理。
不是叶子节点时,isLeaf=false, val=0 or 1都行,这里统一为1.

最后返回四叉树的根。

思路:

分而治之。

简单看下流程吧:
首先一整个矩阵,判断是否全0或全1,
是:叶子节点(isLeaf = true, val=0 or 1), 返回这个节点。
否:建立当前节点作为root(isLeaf = false, val = 1),
然后把矩阵等分成4小块,分别把左上,右上,左下,右下四小块返回的结果给root.topLeft, root.topRight …

每个小块的处理过程重复上面的步骤。
至于怎么分成小块,已知每个小块的左上角坐标(r,c)和边长,又知grid, 就可取出对应的小块。

树的节点建立有点类似于树的前序遍历。

class Solution {
    public Node construct(int[][] grid) {
        int n = grid.length;
        return buildNode(grid, 0, 0, n);
    }

    Node buildNode(int[][] grid, int r, int c, int len) {
        if(allSame(grid, r, c, len))
            return new Node(grid[r][c] == 1 ? true : false, true);
        
        Node root = new Node(true, false);
        root.topLeft = buildNode(grid, r, c, len/2); //矩阵起点的(r,c)和边长
        root.topRight = buildNode(grid, r, c+len/2, len/2);
        root.bottomLeft = buildNode(grid, r+len/2, c, len/2);
        root.bottomRight = buildNode(grid, r+len/2, c+len/2, len/2);
        return root;
    }

    boolean allSame(int[][] grid, int r, int c, int len) {
        int cur = grid[r][c];
        for(int i = r; i < r + len; i++) {
            int[] cols = grid[i];  //一维数组比二维数组高效
            for(int j = c; j < c + len; j++) {
                if(cols[j] != cur) return false;
            }
        }
        return true;
    }
}
Win11注册表没有MMC的解决方法 本文详细介绍了在Win11系统中解决注册表没有MMC项的问题的方法。通过创建并导入注册表修复文件,我们可以成功地在注册表中添加缺失的MMC项。在操作过程中,需要注意备份注册表、以管理员身份运行工具以及系统更新等事项。希望本文能够帮助到遇到类似问题的用户,提高系统管理的效率和便捷性。如果你还有其他关于Windows操作系统的问题或疑问,欢迎随时提问并寻求帮助。 阅读详情

相关推荐

pgAdmin4备份恢复实战:从安装到避坑指南

本文提供了一份详尽的pgAdmin4备份恢复实战指南,涵盖从安装配置到执行备份恢复的全流程。针对Windows环境下的浏览器兼容性、二进制路径配置等常见问题,给出了具体解决方案。重点强调了使用pgAdmin4进行备份恢复的可靠性,特别是在处理包含PostGIS等扩展的数据库时,能有效避免数据类型和权限错误,确保数据迁移的完整性与安全性。

weixin_29266007的博客 438

【leetcode】427. Construct Quad Tree

构建四分树问题,四分树是对平面正方形区域的一个划分,如果四分树的结点是叶子节点,那么表示父节点表示的正方形区域内的值都是相同的,否则其四个子节点将平面四等分,分为左上左下右上右下四个区域。这种问题最适合用递归去做,有点分治的思想。 题目:427. Construct Quad Tree 将一个boolean矩阵用四分树来表示。 思路:遍历矩阵,如果矩阵中的所有值相同,那么就可以用一个叶子节点来表...

很吵请安静 849

瑞芯微RK3568与RK3566芯片选型指南:从接口差异到应用场景深度解析

在嵌入式系统与边缘计算领域,芯片选型是决定产品成败的关键一步。其核心在于理解芯片的架构、接口扩展能力与系统可靠性之间的平衡。以瑞芯微(Rockchip)的RK3568和RK3566为例,这两款同为四核A55架构的芯片,在基础算力上相近,但其面向的应用赛道却因接口配置而截然不同。RK3568凭借其双千兆网口、PCIe 3.0高速接口以及全链路ECC内存支持,在技术价值上更侧重于构建高可靠、高扩展性的系统,如边缘计算网关、工业控制器和网络视频录像机(NVR)。相比之下,RK3566则以其精简的接口配置,精准服务

weixin_33314040的博客 478

【Leetcode】427. Construct Quad Tree

构造过程是递归的,每个节点有四个孩子,分别代表该节点所表示的方阵的左上、右上、左下和右下区块。如果该区块的值都相同,则该节点的值为这个相同值,四个孩子设为null;如果该节点所表示的方阵只有一个元素,则其为叶子。

数学、算法爱好者的博客 246

菜鸟-需求预测与分仓规划

通过修改模型的损失函数对问题进行求解,比其它单模型的效果好很多。

永不理解_fdu的博客 4881

什么是无人机巡检?如何实现无人机自动巡检?

复亚智能的无人机自动巡检系统通过高度自动化的技术,实现了无人机的高效巡检作业。无人机自动机场支持无人机的自动起降和电池更换,自动飞行算法确保无人机在复杂环境中的精准飞行和拍摄,而云端识别诊断和AI感知算法平台则实现图像的实时传输和智能分析。复亚智能,作为无人机技术的创新者和推动者,致力于开发先进的无人机自动巡检解决方案,助力各行各业实现智能化、自动化的巡检工作,引领智能巡检的未来。利用人工智能和机器学习算法,无人机可以被训练来识别特定的模式和异常,如结构损坏、热泄漏等,从而提高巡检的准确性和效率。

foiadrone的博客 2842

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

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

weixin_30474629的博客 270

带标签的PHM2009齿轮箱数据集

PHM2009附加数据集—带标签的齿轮箱数据集,可用于测试算法

qq_39379705的博客 4872

Construct Quad Tree

Given an * nmatrixgridof0'sand1'sonly. We want to represent thegridwith a Quad-Tree. Returnthe root of the Quad-Treerepresenting thegrid. Notice that you can assign the value of a node toTrueorFalsewhenisLeafisFalse, and both areacce...

leetcode 解题思路 273

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败)

安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如

🏆 前端领域优质创作者 8061

建模simulink - 手把手教你搭建xpc平台

概述xpc半实物仿真目标是个基于RTW对低端实时仿真和开发平台,可将计算机或者工控机转变为一个实时系统,不需要第三方操作系统对支持,在计算机上配置输入输入出设备就能和外部交换信息,进行硬件...

不只会拍照的程序猿 7087

【leetcode刷题】[简单]427. 建立四叉树(construct quad tree)-java

建立四叉树 construct quad tree题目分析解答 题目 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值...

mikuluna的博客 3482

【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?

使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。. 在基础工具工具条上单击选择元素工具 ,然后选择圆形。. 在内容列表中右键单击要裁剪的数据框,然后单击属性。. 单击裁剪选项下拉菜单,然后选择裁剪至形状。. 单击数据框属性 对话框中的数据框选项卡。还可以更改裁剪形状轮廓的边框选项。打开软件,添加配套实验数据包中。修改椭圆的属性,使其透明。. 单击所选图形的轮廓。. 单击指定形状按钮。

智慧空间实验室 952

【LeetCode】427. Construct Quad Tree 建立四叉树

给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。 你需要返回能表示矩阵的 四叉树 的根结点。 注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。 四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性: val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False; isLeaf: 当这个节点是一个叶子结点时为 True,如果它有 4

负雪明烛 2815

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 427:Construct Quad Tree 题解与两种思路对比

Combine 这一步可以非常轻,比如这里就只是构造一个节点并挂四个子指针而已。scaler+2​。

六六哥的博客 1038

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode 427. Construct Quad Tree | 427. 建立四叉树(分治法)

题目 https://leetcode.com/problems/construct-quad-tree/ 题解 /* // Definition for a QuadTree node. class Node { public boolean val; public boolean isLeaf; public Node topLeft; public Node topRight; public Node bottomLeft; public Node

寒泉 5万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[树] leetcode 427 Construct Quad Tree

problem:https://leetcode.com/problems/construct-quad-tree/ 一道简单的建树题目,模拟即可。 /* // Definition for a QuadTree node. class Node { public: bool val; bool isLeaf; Node* to...

ayzejx8547408的博客 96

[leetcode] 427. Construct Quad Tree @ python

原题 https://leetcode.com/problems/construct-quad-tree/ 解法 递归. Base case是grid为空, 此时返回None. 先求grid的和, 以确定grid是否为叶子节点. 如果grid的所有值都为0 或1, 那么grid所组成的是叶子节点, 值分别为False或者True. 否则grid不是叶子节点, 它的值为True(象限四分数中只要有一...

闲庭信步 268

LeetCode #427 - Construct Quad Tree

题目描述: We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or false. The root node represents the whole grid. For each node, it will be subdivided into fou...

LawFile的博客 292

LeetCode427. Construct Quad Tree

We want to use quad trees to store anN x Nboolean grid. Each cell in the grid can only be true or false. The root node represents the whole grid. For each node, it will be subdivided into four child...

李歇特冯-兹拜因巴哈的博客 229

leetcode 427. Construct Quad Tree

We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or false. The root node represents the whole grid. For each node, it will be subdivided into f...

djph26741的博客 130

LeetCode 427. 建立四叉树(Construct Quad Tree)题解

这篇文章介绍了如何用四叉树表示一个二进制矩阵。四叉树构建规则是:若子矩阵元素全相同则创建叶子节点,否则递归划分为四个子矩阵处理。文章提供了递归分治的解题思路,包括判断子矩阵同值性、递归划分策略以及终止条件处理。给出的C++实现代码展示了具体的构建过程,通过build函数递归处理四个象限。时间复杂度为O(n²),空间复杂度为O(logn)。该算法适用于2^k×2^k的矩阵,是典型的递归分治应用场景,能有效处理矩阵的四叉树表示问题。

2302_80441878的博客 165

Leetcode 427. Construct Quad Tree

文章作者:Tyan 博客:noahsnail.com  |  优快云  |  简书 1. Description 2. Solution **解析:**采用递归的方法构建Quad Tree,逐步分解即可。 Version 1 """ # Definition for a QuadTree node. class Node: def __init__(self, val, isLeaf, topLeft, topRight, bottomLeft, bo

SnailTyan 190

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

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

小川的博客 316

427.建立四叉树

题目描述 给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。 你需要返回能表示矩阵的 四叉树 的根结点。 注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。 四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性: val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False; isLeaf: 当这个节点是一个叶子结点...

ososod的博客 188

信号转图像实战:从傅里叶变换到时频分析与故障诊断

信号处理中,原始波形往往难以直接揭示规律,而将信号转换为图像是直观分析的有效手段。从基础的傅里叶变换原理出发,理解时域与频域的映射关系,掌握采样率、频谱泄露、窗函数等核心参数,是构建可靠频谱图的前提。对于非平稳信号,短时傅里叶变换生成时频谱图,能够同时呈现频率随时间的变化,在设备故障诊断和语音识别中广泛应用。进一步结合深度学习,格拉姆角场、马尔可夫变迁场等方法将一维序列编码为二维图像,可直接用于卷积神经网络训练。Python为这些信号转图像方法提供了完整工具链,让工程实践更高效。

weixin_34414650的博客 461
上一篇: leetcode 1675. Minimize Deviation in Array(最小化数组偏差)
下一篇: leetcode 912. Sort an Array(数组排序:quick sort, merge sort, 桶排序)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值