Java实现 LeetCode 558 四叉树交集(四叉树,第一次遇到,研究了半天)
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 四叉树交集(四叉树,第一次遇到,研究了半天)相关推荐
- LeetCode 558. 四叉树交集
558. 四叉树交集 [分治+递归]这道题太长了,但是我们可以简单梳理一下: 1.如果两个节点任何一个为叶子: 如果叶子是1,那么直接返回为1的叶子就行 如果叶子是0,那么直接返回另一个节点 2.递归 ...
- java求最短距离,Java实现 LeetCode 821 字符的最短距离(暴力)
821. 字符的最短距离 给定一个字符串 S 和一个字符 C.返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组. 示例 1: 输入: S = "loveleet ...
- LeetCode 757. 设置交集大小至少为2
LeetCode 757. 设置交集大小至少为2 题目描述 一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b. 给你一组整数区间interv ...
- java中set集合的交集、并集、差集
java中set集合的交集.并集.差集 集合关系示例图 示例代码 public static void contextLoads() {List<String> a= Arrays.asL ...
- JAVA Hashset求集合的交集并集差集
JAVA Hashset求集合的交集并集差集 Hashset是Set接口较为常见的一个子类,该子类的最大特点是不允许保存重复的元素,并且所有的内容都采用散列(无序)的方式进行存储. package c ...
- Java支持latex,基于Java和LaTeX的文档自动生成技术研究
基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...
- java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究
基于Java的六子棋人工智能系统的设计研究 邱烨,杨旭,王伟 中国矿业大学计算机科学与技术学院,徐州(221008) 摘要:六子棋作为一个刚刚兴起不久的棋类游戏,其计算机博弈算法的研究还相对较少.六子 ...
- 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究
基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...
- LeetCode 558. 四叉树交集(递归)
1. 题目 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其细分为四个 ...
最新文章
- 超级有意思的代码注释
- 机器学习算法之——隐马尔可夫模型(Hidden Markov Models,HMM) 代码实现
- 一个感染型木马病毒分析(二)
- java实现打印等腰三角形
- 判断力有时候有多么重要?懂得选择多么重要?
- Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划
- Oracle expdp
- 洛谷 P2048 BZOJ 2006 [NOI2010]超级钢琴
- 采用C#泛型实现状态(State)模式
- 机器学习框架_机器学习中的概率框架
- 设备指纹技术分析和应用分析
- 基于K—近邻的车牌号识别小实验
- 利用BS爬取单词音标
- SecureCRT创建串口连接
- [免费专栏] Android安全之Drozer安全测试详细使用教程
- 华东师范大学 计算机 博士 毕业论文,【学位】华东师范大学博士、硕士学位论文基本格式要求...
- Python使用random模块实现掷骰子游戏
- 推荐几个好用实用的免费图标素材(好看的icon)
- Kali学习笔记32:Maltego、Exiftool
- 使用 JavaScript 的代价!(2018 版)