427. 建立四叉树

题目来源:427. 建立四叉树

2022.04.29 每日一题

LeetCode 题解持续更新中GitHub仓库地址 CSDN博客地址

今天的题目一看,有点吓人,上来就给弄了个四叉树。但是实际仔细看一下题目和样例,就会发现,其实还好,就是 递归 的改编版。

我们需要做的就是判断一个范围之中的值是否都相等,如果不相等,就将当前范围划分为 四份,得到了新的范围,然后通过这四个范围,继续进行递归探寻。

class Solution {public:Node *construct(vector<vector<int>> &grid) {return dfs(0, 0, grid.size(), grid.size(), grid);}// 创建递归函数Node *dfs(int r1, int c1, int r2, int c2, vector<vector<int>> &g) {// 创建变量 tag 判断 从 点(r1,c1) 到 点(r2,c2) 中是否所有的数字都是一样的bool tag = true;// 遍历 点(r1,c1) 到 点(r2,c2)这个范围之中的元素for (int i = r1; i < r2; i++) {for (int j = c1; j < c2; j++)// 如果发现了不相等if (g[r1][c1] != g[i][j]) {// 将 tag 置反tag = false;// 并且退出遍历break;}// 继续退出遍历if (!tag) break;}// 根据题意,如果范围内的数字均相同( tag 为 true),val 的值与 范围内的值相同,这里需要注意一下, val 是布尔类型// 并且将 isLeaf 置为 Trueif (tag) return new Node(g[r1][c1] == 1, true);// 如果不满足要求,就将 val 随意置为一个值,将 isLeaf 置为 false,四个节点分别置为新的四叉树节点。return new Node(true, false, dfs(r1, c1, (r1 + r2) / 2, (c1 + c2) / 2, g), dfs(r1, (c1 + c2) / 2, (r1 + r2) / 2, c2, g), dfs((r1 + r2) / 2, c1, r2, (c1 + c2) / 2, g), dfs((r1 + r2) / 2, (c1 + c2) / 2, r2, c2, g));}
};
public class Solution {public Node construct(int[][] grid) {return dfs(0, 0, grid.length, grid.length, grid);}// 创建递归函数Node dfs(int r1, int c1, int r2, int c2, int[][] g) {// 创建变量 tag 判断 从 点(r1,c1) 到 点(r2,c2) 中是否所有的数字都是一样的boolean tag = true;// 遍历 点(r1,c1) 到 点(r2,c2)这个范围之中的元素for (int i = r1; i < r2; i++) {for (int j = c1; j < c2; j++)// 如果发现了不相等if (g[r1][c1] != g[i][j]) {// 将 tag 置反tag = false;// 并且退出遍历break;}// 继续退出遍历if (!tag) break;}// 根据题意,如果范围内的数字均相同( tag 为 true),val 的值与 范围内的值相同,这里需要注意一下, val 是布尔类型// 并且将 isLeaf 置为 Trueif (tag) return new Node(g[r1][c1] == 1, true);// 如果不满足要求,就将 val 随意置为一个值,将 isLeaf 置为 false,四个节点分别置为新的四叉树节点。return new Node(true, false, dfs(r1, c1, (r1 + r2) / 2, (c1 + c2) / 2, g), dfs(r1, (c1 + c2) / 2, (r1 + r2) / 2, c2, g), dfs((r1 + r2) / 2, c1, r2, (c1 + c2) / 2, g), dfs((r1 + r2) / 2, (c1 + c2) / 2, r2, c2, g));}
}

LeetCode 427. 建立四叉树相关推荐

  1. Java实现 LeetCode 427 建立四叉树

    427. 建立四叉树 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络.网络中每一格的值只会是真或假.树的根结点代表整个网络.对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相 ...

  2. LeetCode——427. 建立四叉树

    427. 建立四叉树 题目描述 答案 方法一:递归 思路与算法 代码 方法二:递归 + 二维前缀和优化 思路与算法 代码 复杂度分析 题目描述 给你一个 n * n 矩阵 grid ,矩阵由若干 0 ...

  3. LeetCode 427. 建立四叉树(递归)

    1. 题目 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络.网络中每一格的值只会是真或假.树的根结点代表整个网络.对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的. 每 ...

  4. LeetCode 427. 建立四叉树 (递归dfs \ 矩阵)

    思路 根据0,1矩阵,构建四叉树,根据题意就是要判断,当前矩阵中的值是否全部相同 若矩阵内值相同,也就是只有0或1,则作为叶子节点,叶子结点的值就是这个矩阵的值 若矩阵内值不相同,也就是有0也有1,则 ...

  5. LeetCode——427.建立四叉树

    通过万岁!!! 题目:就是给你一个n*n的数组,然后我们构建一个四叉树.就是把数组进行4等分,然后四个部分是四叉树的四个分支.只不过在这个过程中有一些规则. 如果这个数组(确切的说是子数组),里面的元 ...

  6. LeetCode题解:427. 建立四叉树

    文章目录 题目 427. 建立四叉树 1.题目描述 2.原题链接 解题报告 1.解题思路 2.解题方法 3.时间复杂度分析 4.代码详解 总结 前缀和实现 题目 427. 建立四叉树 1.题目描述   ...

  7. LeetCode 练习——427.建立四叉树

    文章目录 1.题目描述 2.思路 2.1 代码 2.2 测试结果 3.总结 1.题目描述 建立四叉树 给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成.请你用四叉树表示该矩阵 gr ...

  8. 力扣(LeetCode)427. 建立四叉树(2023.03.01)

    给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成.请你用四叉树表示该矩阵 grid . 你需要返回能表示矩阵的 四叉树 的根结点. 注意,当 isLeaf 为 False 时,你可 ...

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

    题目 https://leetcode.com/problems/construct-quad-tree/ 题解 /* // Definition for a QuadTree node. class ...

最新文章

  1. 推荐一个代码自动完成的工具AutoCode
  2. ESP32开发板 V1.0.0 Rev1 wifi 蓝牙4MB FLASH MicroPython
  3. python3 通过 pybind11 使用Eigen加速
  4. python开源项目homeassistant_树莓派安装家庭助理,Homeassistant,HASS
  5. Android 路由实践(二)
  6. mysql为什么选错索引?怎么解决?
  7. 毕业设计10-22星期日
  8. springboot~读取自定义配置项
  9. SpringMVC的RESTful(一)
  10. html字体中英文设置,用 CSS3 指定网页的中英文分别使用不同字体
  11. centos7的scp命令_Linux scp命令
  12. 【新手入门】自己动手搭建云服务器
  13. 佳能2900打印机与win10不兼容_Win10系统如何解决佳能打印机打印问题?
  14. java 爬虫抢票_抢票爬虫 - nkandkn - 博客园
  15. 如何使用 Alink 进行中文情感分析?
  16. CSP201912-3化学方程式
  17. 曲面积分的投影法_第二型曲面积分的投影法与对称性
  18. Error in nextTick TypeError Cannot read property 'children' of undefined 解决
  19. 监控电脑屏幕python
  20. android 六棱形分析图,[转载]菱形整理形态、三角形整理形态图解及分析

热门文章

  1. 每天干的啥?(2019.6)
  2. win10 下 caffe 的第一个测试程序(附带详细讲解)
  3. Spring Boot Post接口数据加解密
  4. 【javaWeb微服务架构项目——乐优商城day05】——商品规格参数管理(增、删、改,查已完成),SPU和SKU数据结构,商品查询
  5. 毕业设计 Stm32人体心率血氧无线监测系统 - 单片机 物联网
  6. 软件测试二分查找函数,二分查找
  7. Windows 10如何进入和退出安全模式
  8. 街道大动土,断网一周,学习计划照旧
  9. 百度地图api实现的定位,导航,附近搜索
  10. 利用多组学整合鉴定人类疾病共享的和疾病特异性的宿主基因-微生物组关联