给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。

你需要返回能表示矩阵的 四叉树 的根结点。

注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。

四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:

val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False;
        isLeaf: 当这个节点是一个叶子结点时为 True,如果它有 4 个子节点则为 False 。
class Node {
    public boolean val;
    public boolean isLeaf;
    public Node topLeft;
    public Node topRight;
    public Node bottomLeft;
    public Node bottomRight;
}
我们可以按以下步骤为二维区域构建四叉树:

如果当前网格的值相同(即,全为 0 或者全为 1),将 isLeaf 设为 True ,将 val 设为网格相应的值,并将四个子节点都设为 Null 然后停止。
        如果当前网格的值不同,将 isLeaf 设为 False, 将 val 设为任意值,然后如下图所示,将当前网格划分为四个子网格。
        使用适当的子网格递归每个子节点。

/*
// 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() {this.val = false;this.isLeaf = false;this.topLeft = null;this.topRight = null;this.bottomLeft = null;this.bottomRight = null;}public Node(boolean val, boolean isLeaf) {this.val = val;this.isLeaf = isLeaf;this.topLeft = null;this.topRight = null;this.bottomLeft = null;this.bottomRight = null;}public Node(boolean val, boolean isLeaf, Node topLeft, Node topRight, Node bottomLeft, Node bottomRight) {this.val = val;this.isLeaf = isLeaf;this.topLeft = topLeft;this.topRight = topRight;this.bottomLeft = bottomLeft;this.bottomRight = bottomRight;}
};
*/class Solution {int[][] g;public Node construct(int[][] grid) {g = grid;   return dfs(0,0,grid.length-1,grid.length-1);    }public Node dfs(int a,int b,int c, int d){boolean isSame = true;int curFirst = g[a][b];//检测矩阵内部元素是否全部一致for(int i = a;i <=c && isSame;i++ ){for(int j = b;j <= d && isSame;j++){if(g[i][j] != curFirst){isSame = false;}}}if(isSame){//等于1说明整个矩阵都是1,设置value为1(true),isLeaf为truereturn new Node(curFirst == 1,true);}//value设置为任意值Node root = new Node(curFirst == 1,false);int dx = c-a+1;int dy = d-b+1;root.topLeft = dfs(a,b,a+dx/2-1,b+dy/2-1);root.topRight = dfs(a,b+dy/2,a+dx/2-1,d);root.bottomLeft = dfs(a+dx/2,b,c,d-dx/2);root.bottomRight = dfs(a+dx/2,b+dy/2,c,d);return root;}
}

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户

内存消耗:41.8 MB, 在所有 Java 提交中击败了15.89%的用户

Java构建四叉树leetcode_427相关推荐

  1. java+构建+工具+Ant+Maven+Gradle

    java+构建+工具+Ant+Maven+Gradle Ant+Maven+Gradle+............ 目前: Ant已经销声匿迹.Maven也没落了,而Gradle的发展则如日中天. M ...

  2. 云效 Flow——Java构建并通过云效上传二方库到 Maven 私有仓库

    解决方案 当用户开通了 Maven 私有仓库服务后,云效会为用户生成两个私有仓库,一个用于存放 release 版本的二方库,一个用于存储 SNAPSHOT 版本的二方库. Release 仓库地址示 ...

  3. Java构建工具, ZeroC ICE, word2vec

    https://antkillerfarm.github.io/ Java构建工具 构建工具的意义在于,提供一种独立于IDE的软件构建方式.而且通常来说,构建工具更适合特大项目的构建.比如,即使是以功 ...

  4. java 构建者模式_Java方法中的参数太多,第3部分:构建器模式

    java 构建者模式 在我的前两篇文章中,我研究了如何通过自定义类型和参数对象减少构造函数或方法调用所需的参数数量. 在本文中,我将讨论如何使用构建器模式来减少构造器所需的参数数量,并讨论该模式如何甚 ...

  5. javaone_JavaOne 2012:使用HTML5和Java构建移动应用程序

    javaone 我返回了Parc 55 (任务会议室),观看Max Katz的( Exadel开发人员关系)"使用HTML5和Java构建移动应用程序" Bird-of-Feath ...

  6. JavaOne 2012:使用HTML5和Java构建移动应用程序

    我返回了Parc 55 (任务会议室),观看Max Katz的( Exadel开发人员关系)"用HTML5和Java构建移动应用程序" Bird-of-Feather(BoF)演示 ...

  7. grade java_Gradle Java 构建入门

    Java 构建入门 Java 插件 如你所见,Gradle 是一个通用工具.它可以通过脚本构建任何你想要实现的东西,真正实现开箱即用.但前提是你需要在脚本中编写好代码才行. 大部分 Java 项目基本 ...

  8. java构建工具 gradle_Java构建工具

    #java构建工具 Ant Ant 是 Apache 组织下的一个跨平台的项目构建工具,它是一个基于任务和依赖的构建系统,是过程式的.开发者需要显示的指定每一个任务,每个任务包含一组由 XML 编码的 ...

  9. java 构建者模式_Java不可变类–构建器模式

    java 构建者模式 In my last post, I explained about Builder Pattern in Java. Sometime back I wrote an arti ...

最新文章

  1. php 随机在文章中添加锚文本_seo网站优化技巧之:8种优质锚文本的做法
  2. java poi 读取xlsx文件_使用POI读取xlsx文件(SXSSFWorkbook)
  3. 实时计字数提醒的文本框
  4. xsy 1836 - Shop
  5. CNN基础知识(1)
  6. 好事多磨:Ogre1.7 编译记
  7. 【算法设计与分析】10 差消法化简高阶递推方程
  8. 事故现场:MySQL 中一个双引号的错位引发的血案
  9. Qt-做一个快速打包插件(一键完成项目软件打包)
  10. ZeroPrompt:首个中文多任务Prompt统一模型,zeroshot性能可比微调!
  11. android开发学习笔记系列(1)-android起航
  12. Android来电铃声默认设置的实现方法与怎么设置语音来电的默认铃声
  13. 自制小型USB TO TTL串口工具
  14. perl脚本 linux,linux – 通过Perl脚本设置环境变量
  15. latex---插入三线表伪代码流程图
  16. RDA5856ETE系列_(1)新手入门
  17. JavaScript事件代理(事件委托)
  18. pycharm汉化教程
  19. [转载]菜鸟的草缸 篇一:器材篇(附鱼缸、过滤器、灯、草泥开箱过程)
  20. Windows DNS服务器的子网掩码排序

热门文章

  1. PDF电子签章、签字
  2. java代码控制qq、微信发送消息
  3. PHP的模板注入(Smarty模板)
  4. Googletest 测试
  5. matlab怎么求噪声功率,MATLAB求噪声的功率谱密度两种办法的区别
  6. Vulkan学习(九): Vertex Input Description Vertex Buffer Creation
  7. 您的公司是如何应对发生在日本的灾难的
  8. (10) 朴素贝叶斯
  9. 银行家算法(操作系统 Java版)
  10. Understand: 静态代码分析神器