-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy path558.Quad-Tree-Intersection.java
74 lines (69 loc) · 2.37 KB
/
558.Quad-Tree-Intersection.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// https://leetcode.com/problems/quad-tree-intersection/
//
// algorithms
// Easy (42.32%)
// Total Accepted: 6,306
// Total Submissions: 14,900
// beats 100.0% of java submissions
/*
// 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 == null) {
return quadTree2;
} else if (quadTree2 == null) {
return quadTree1;
}
Node n = null;
if (quadTree1.isLeaf && quadTree2.isLeaf) {
n = new Node(quadTree1.val || quadTree2.val, true, null, null, null, null);
} else if (!quadTree1.isLeaf && !quadTree2.isLeaf) {
Node tl = intersect(quadTree1.topLeft, quadTree2.topLeft);
Node tr = intersect(quadTree1.topRight, quadTree2.topRight);
Node bl = intersect(quadTree1.bottomLeft, quadTree2.bottomLeft);
Node br = intersect(quadTree1.bottomRight, quadTree2.bottomRight);
if (tl.isLeaf && tr.isLeaf && bl.isLeaf && br.isLeaf) {
if (tl.val && tr.val && bl.val && br.val) {
n = new Node(true, true, null, null, null, null);
} else if (!tl.val && !tr.val && !bl.val && !br.val) {
n = new Node(false, true, null, null, null, null);
} else {
n = new Node(false, false, tl, tr, bl, br);
}
} else {
n = new Node(false, false, tl, tr, bl, br);
}
} else if (quadTree1.isLeaf) {
if (quadTree1.val) {
n = new Node(true, true, null, null, null, null);
} else {
n = quadTree2;
}
} else {
if (quadTree2.val) {
n = new Node(true, true, null, null, null, null);
} else {
n = quadTree1;
}
}
return n;
}
}