建立四叉树 construct quad tree

  • 题目
  • 分析
  • 解答

题目

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

每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值。

你的任务是使用一个四叉树表示给定的网络。下面的例子将有助于你理解这个问题:

给定下面这个8 x 8 网络,我们将这样建立一个对应的四叉树:

由上文的定义,它能被这样分割:

对应的四叉树应该像下面这样,每个结点由一对 (isLeaf, val) 所代表.

对于非叶子结点,val 可以是任意的,所以使用 * 代替。

提示:

  1. N 将小于 1000 且确保是 2 的整次幂。
  2. 如果你想了解更多关于四叉树的知识,你可以参考这个 wiki 页面。

代码模板:

/*
// Definition for a QuadTree node.
class Node {public boolean val;public boolean isLeaf;public Node topLeft;public Node topRight;public Node bottomLeft;public Node bottomRight;public Node() {}public Node(boolean _val,boolean _isLeaf,Node _topLeft,Node _topRight,Node _bottomLeft,Node _bottomRight) {val = _val;isLeaf = _isLeaf;topLeft = _topLeft;topRight = _topRight;bottomLeft = _bottomLeft;bottomRight = _bottomRight;}
};
*/
class Solution {public Node construct(int[][] grid) {}
}

分析

这道题目很懵。引用一下别人的总结。
这道题将一个大区域划分为若干个小区域(要求每个小区域中的val全部一致),每次都是将一个大区域划分为4份(直到小区域val全部一致,终止)。

  • 按照声明中的topLeft、topRight、bottomLeft以及bottomRight将一个大区域划分为4各小区域。
  • 使用for循环校验每个小区域中val是否全部一致。
  • 如果小区域不一致,则为非叶子结点,还可以继续划分(此时val为任意bool值)。
  • 如果小区域全部一致,则isLeaf此时设置val、isLeaf=true同时四个指针全部置空

解答

/*
// Definition for a QuadTree node.
class Node {public boolean val;public boolean isLeaf;public Node topLeft;public Node topRight;public Node bottomLeft;public Node bottomRight;public Node() {}public Node(boolean _val,boolean _isLeaf,Node _topLeft,Node _topRight,Node _bottomLeft,Node _bottomRight) {val = _val;isLeaf = _isLeaf;topLeft = _topLeft;topRight = _topRight;bottomLeft = _bottomLeft;bottomRight = _bottomRight;}
};
*/
class Solution {public Node construct(int[][] grid) {return fun(grid,0,grid[0].length,0,grid.length);}public Node fun(int[][] grid,int left,int right,int top,int bottom){Node root = null;int key = grid[top][left];for(int i=top;i<bottom;i++){for(int j=left;j<right;j++){if(grid[i][j]!=key){Node topLeft = fun(grid,left,(left+right)/2,top,(top+bottom)/2);Node topRight = fun(grid,(left+right)/2,right,top,(top+bottom)/2);Node bottomLeft = fun(grid,left,(left+right)/2,(top+bottom)/2,bottom);Node bottomRight = fun(grid,(left+right)/2,right,(top+bottom)/2,bottom);root = new Node(false,false,topLeft,topRight,bottomLeft,bottomRight);return root;}}}root = new Node();root.val = key==1?true:false;root.isLeaf = true;return root;}
}

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

  1. 【leetcode刷题】70.最少操作使数组递增——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 如果不限制对某个数进行+1 而是运行+1 或者-1 .那么本题怎么该如何解呢? --leetcode此题热评 前言 哈喽,大家好, ...

  2. 《LeetCode刷题》954. 二倍数对数组(java篇)

    题目描述: 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] ...

  3. C#LeetCode刷题之#101-对称二叉树(Symmetric Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4068 访问. 给定一个二叉树,检查它是否是镜像对称的. 例如,二 ...

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

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

  5. C#LeetCode刷题-树

    树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历 61.6% 中等 95 不同的二叉搜索树 II 43.4% 中等 96 不同的二叉搜索树 51.6% 中等 98 验证二叉搜索树 22.2% ...

  6. LeetCode刷题(十)----数组-----medium部分(Java、C++)

    LeetCode刷题(十)-----数组-------medium部分(Java.C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output, ...

  7. LeetCode 427. 建立四叉树

    427. 建立四叉树 题目来源:427. 建立四叉树 2022.04.29 每日一题 LeetCode 题解持续更新中GitHub仓库地址 CSDN博客地址 今天的题目一看,有点吓人,上来就给弄了个四 ...

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

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

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

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

  10. 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)

    LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...

最新文章

  1. ASP.NET MVC 导入Excel文件
  2. python c扩展
  3. 用python中django创建网页终端直接关闭是什么问题_如何用Python Django创建网站?系列文章03(持续更新...)...
  4. wxWidgets:wxSizer类用法
  5. php7安装kafka扩展(已经测试)
  6. docker 学习笔记一(教程) 快速上手
  7. mac识别androidUSB调试
  8. python 3.5安装pywin32
  9. CSS 文档架构——便于读取
  10. KITTI数据集下载
  11. 7教程统计意义_SPSS进行中介效应检验的实战操作与分析结果详解 ——【杏花开生物医药统计】...
  12. 中望cad自定义快捷键命令_[cad常用快捷键命令大全]中望cad常用快捷键及命令
  13. IE Tab Plus 安装设置说明
  14. 用CAD看图软件查找文字需要怎么做
  15. 一年太久,只争朝夕——2018年终总结
  16. 数据挖掘技术-绘制人口数目直方图
  17. linux之域名更改
  18. JavaScript 教程「1」:与君初相识
  19. Linux服务器git clone卡住不动
  20. 龙芯3A5000参数 龙芯3A5000怎么样

热门文章

  1. 计算机网络考研知识点史上最全背诵笔记
  2. 服务器ssd内存性能对比,真是大快人心 九款240/256G SSD大横评
  3. 实战制作U盘工具去除XP系统管理员密码
  4. stm32 操作W25Q256 W25Q16 spi flash
  5. 手机看html 图片,手机HTML怎么看
  6. 在火狐浏览器里怎么看请求头
  7. 王道训练营3月11日
  8. Mimics17.0安装教程
  9. scrapy微信爬虫使用总结
  10. 自然语言处理与企业对话系统设计