558. 四叉树交集

四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft、topRight、bottomLeft 和 bottomRight。四叉树通常被用来划分一个二维空间,递归地将其细分为四个象限或区域。

我们希望在四叉树中存储 True/False 信息。四叉树用来表示 N * N 的布尔网格。对于每个结点, 它将被等分成四个孩子结点直到这个区域内的值都是相同的。每个节点都有另外两个布尔属性:isLeaf 和 val。当这个节点是一个叶子结点时 isLeaf 为真。val 变量储存叶子结点所代表的区域的值。

例如,下面是两个四叉树 A 和 B:

A:

+-------+-------+   T: true
|       |       |   F: false
|   T   |   T   |
|       |       |
+-------+-------+
|       |       |
|   F   |   F   |
|       |       |
+-------+-------+
topLeft: T
topRight: T
bottomLeft: F
bottomRight: F

B:

+-------+---+---+
|       | F | F |
|   T   +---+---+
|       | T | T |
+-------+---+---+
|       |       |
|   T   |   F   |
|       |       |
+-------+-------+
topLeft: T
topRight:topLeft: FtopRight: FbottomLeft: TbottomRight: T
bottomLeft: T
bottomRight: F

你的任务是实现一个函数,该函数根据两个四叉树返回表示这两个四叉树的逻辑或(或并)的四叉树。

A: B: C (A or B):

+-------+-------+  +-------+---+---+  +-------+-------+
|       |       |  |       | F | F |  |       |       |
|   T   |   T   |  |   T   +---+---+  |   T   |   T   |
|       |       |  |       | T | T |  |       |       |
+-------+-------+  +-------+---+---+  +-------+-------+
|       |       |  |       |       |  |       |       |
|   F   |   F   |  |   T   |   F   |  |   T   |   F   |
|       |       |  |       |       |  |       |       |
+-------+-------+  +-------+-------+  +-------+-------+

提示:

A 和 B 都表示大小为 N * N 的网格。
N 将确保是 2 的整次幂。
如果你想了解更多关于四叉树的知识,你可以参考这个 wiki 页面。
逻辑或的定义如下:如果 A 为 True ,或者 B 为 True ,或者 A 和 B 都为 True,则 “A 或 B” 为 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 intersect(Node quadTree1, Node quadTree2) {if(quadTree1.isLeaf && quadTree2.isLeaf){Node res = new Node(false, false, null, null, null, null);res.val = quadTree1.val || quadTree2.val;res.isLeaf = true;return res;}else if(quadTree1.isLeaf && !quadTree2.isLeaf){if(quadTree1.val){return quadTree1;}else{return quadTree2;}}else if(quadTree2.isLeaf && !quadTree1.isLeaf){if(quadTree2.val){return quadTree2;}else{return quadTree1;}}else{//都不是叶子结点,就创建结点递归Node res = new Node(false, false, null, null, null, null);res.topLeft = intersect(quadTree1.topLeft, quadTree2.topLeft);res.topRight = intersect(quadTree1.topRight, quadTree2.topRight);res.bottomLeft = intersect(quadTree1.bottomLeft, quadTree2.bottomLeft);res.bottomRight = intersect(quadTree1.bottomRight, quadTree2.bottomRight); //如果都为true,就向下搜索if(res.topLeft.isLeaf && res.topRight.isLeaf&& res.bottomLeft.isLeaf && res.bottomRight.isLeaf&& res.topLeft.val == res.topRight.val&& res.topRight.val == res.bottomLeft.val&& res.bottomLeft.val == res.bottomRight.val){res = res.topLeft;}return res;}}
}

Java实现 LeetCode 558 四叉树交集(四叉树,第一次遇到,研究了半天)相关推荐

  1. LeetCode 558. 四叉树交集

    558. 四叉树交集 [分治+递归]这道题太长了,但是我们可以简单梳理一下: 1.如果两个节点任何一个为叶子: 如果叶子是1,那么直接返回为1的叶子就行 如果叶子是0,那么直接返回另一个节点 2.递归 ...

  2. java求最短距离,Java实现 LeetCode 821 字符的最短距离(暴力)

    821. 字符的最短距离 给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleet ...

  3. LeetCode 757. 设置交集大小至少为2

    LeetCode 757. 设置交集大小至少为2 题目描述 一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b. 给你一组整数区间interv ...

  4. java中set集合的交集、并集、差集

    java中set集合的交集.并集.差集 集合关系示例图 示例代码 public static void contextLoads() {List<String> a= Arrays.asL ...

  5. JAVA Hashset求集合的交集并集差集

    JAVA Hashset求集合的交集并集差集 Hashset是Set接口较为常见的一个子类,该子类的最大特点是不允许保存重复的元素,并且所有的内容都采用散列(无序)的方式进行存储. package c ...

  6. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  7. java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究

    基于Java的六子棋人工智能系统的设计研究 邱烨,杨旭,王伟 中国矿业大学计算机科学与技术学院,徐州(221008) 摘要:六子棋作为一个刚刚兴起不久的棋类游戏,其计算机博弈算法的研究还相对较少.六子 ...

  8. 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究

    基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...

  9. LeetCode 558. 四叉树交集(递归)

    1. 题目 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...

最新文章

  1. 超级有意思的代码注释
  2. 机器学习算法之——隐马尔可夫模型(Hidden Markov Models,HMM) 代码实现
  3. 一个感染型木马病毒分析(二)
  4. java实现打印等腰三角形
  5. 判断力有时候有多么重要?懂得选择多么重要?
  6. Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划
  7. Oracle expdp
  8. 洛谷 P2048 BZOJ 2006 [NOI2010]超级钢琴
  9. 采用C#泛型实现状态(State)模式
  10. 机器学习框架_机器学习中的概率框架
  11. 设备指纹技术分析和应用分析
  12. 基于K—近邻的车牌号识别小实验
  13. 利用BS爬取单词音标
  14. SecureCRT创建串口连接
  15. [免费专栏] Android安全之Drozer安全测试详细使用教程
  16. 华东师范大学 计算机 博士 毕业论文,【学位】华东师范大学博士、硕士学位论文基本格式要求...
  17. Python使用random模块实现掷骰子游戏
  18. 推荐几个好用实用的免费图标素材(好看的icon)
  19. Kali学习笔记32:Maltego、Exiftool
  20. 使用 JavaScript 的代价!(2018 版)

热门文章

  1. Python-shogun安装问题
  2. springcloud.3.服务注册与发现
  3. matlab调用zlg,stm32读取ZLG7290按键键值实验源码
  4. 大数据项目篇--电商用户画像
  5. 微信小程序——引用阿里云字体
  6. Reaction Paper
  7. Js放在head和body中的区别
  8. 【FPGA工程篇】图像采集及显示(一)
  9. 2019年9月25日
  10. 输入矩形的长和宽。计算其面积和周长