【leetcode刷题】[简单]427. 建立四叉树(construct quad tree)-java
建立四叉树 construct quad tree
- 题目
- 分析
- 解答
题目
我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的.
每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值。
你的任务是使用一个四叉树表示给定的网络。下面的例子将有助于你理解这个问题:
给定下面这个8 x 8 网络,我们将这样建立一个对应的四叉树:
由上文的定义,它能被这样分割:
对应的四叉树应该像下面这样,每个结点由一对 (isLeaf, val) 所代表.
对于非叶子结点,val 可以是任意的,所以使用 * 代替。
提示:
- N 将小于 1000 且确保是 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相关推荐
- 【leetcode刷题】70.最少操作使数组递增——Java版
⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 如果不限制对某个数进行+1 而是运行+1 或者-1 .那么本题怎么该如何解呢? --leetcode此题热评 前言 哈喽,大家好, ...
- 《LeetCode刷题》954. 二倍数对数组(java篇)
题目描述: 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] ...
- C#LeetCode刷题之#101-对称二叉树(Symmetric Tree)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4068 访问. 给定一个二叉树,检查它是否是镜像对称的. 例如,二 ...
- LeetCode题解:427. 建立四叉树
文章目录 题目 427. 建立四叉树 1.题目描述 2.原题链接 解题报告 1.解题思路 2.解题方法 3.时间复杂度分析 4.代码详解 总结 前缀和实现 题目 427. 建立四叉树 1.题目描述 ...
- C#LeetCode刷题-树
树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历 61.6% 中等 95 不同的二叉搜索树 II 43.4% 中等 96 不同的二叉搜索树 51.6% 中等 98 验证二叉搜索树 22.2% ...
- LeetCode刷题(十)----数组-----medium部分(Java、C++)
LeetCode刷题(十)-----数组-------medium部分(Java.C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output, ...
- LeetCode 427. 建立四叉树
427. 建立四叉树 题目来源:427. 建立四叉树 2022.04.29 每日一题 LeetCode 题解持续更新中GitHub仓库地址 CSDN博客地址 今天的题目一看,有点吓人,上来就给弄了个四 ...
- Java实现 LeetCode 427 建立四叉树
427. 建立四叉树 我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络.网络中每一格的值只会是真或假.树的根结点代表整个网络.对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相 ...
- LeetCode——427. 建立四叉树
427. 建立四叉树 题目描述 答案 方法一:递归 思路与算法 代码 方法二:递归 + 二维前缀和优化 思路与算法 代码 复杂度分析 题目描述 给你一个 n * n 矩阵 grid ,矩阵由若干 0 ...
- 卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
LeetCode刷题笔记:二分查找(简单) 学算法,刷力扣,加油卷,进大厂! 题目描述 涉及算法 题目解答 学算法,刷力扣,加油卷,进大厂! 题目描述 力扣题目链接 给定一个 n 个元素有序的(升序) ...
最新文章
- ASP.NET MVC 导入Excel文件
- python c扩展
- 用python中django创建网页终端直接关闭是什么问题_如何用Python Django创建网站?系列文章03(持续更新...)...
- wxWidgets:wxSizer类用法
- php7安装kafka扩展(已经测试)
- docker 学习笔记一(教程) 快速上手
- mac识别androidUSB调试
- python 3.5安装pywin32
- CSS 文档架构——便于读取
- KITTI数据集下载
- 7教程统计意义_SPSS进行中介效应检验的实战操作与分析结果详解 ——【杏花开生物医药统计】...
- 中望cad自定义快捷键命令_[cad常用快捷键命令大全]中望cad常用快捷键及命令
- IE Tab Plus 安装设置说明
- 用CAD看图软件查找文字需要怎么做
- 一年太久,只争朝夕——2018年终总结
- 数据挖掘技术-绘制人口数目直方图
- linux之域名更改
- JavaScript 教程「1」:与君初相识
- Linux服务器git clone卡住不动
- 龙芯3A5000参数 龙芯3A5000怎么样