class Solution {
public Node intersect(Node quadTree1, Node quadTree2) {
if (quadTree1.isLeaf) {
if (quadTree1.val) {
return quadTree1;
} else {
quadTree1.isLeaf = false;
return quadTree2;
}
}
if (quadTree2.isLeaf) {
if (quadTree2.val) {
quadTree1.isLeaf = true;
return quadTree2;
} else {
return quadTree1;
}
}
quadTree1.bottomLeft = intersect(quadTree1.bottomLeft, quadTree2.bottomLeft);
quadTree1.bottomRight = intersect(quadTree1.bottomRight, quadTree2.bottomRight);
quadTree1.topLeft = intersect(quadTree1.topLeft, quadTree2.topLeft);
quadTree1.topRight = intersect(quadTree1.topRight, quadTree2.topRight);
if (judge(quadTree1.bottomLeft) && judge(quadTree1.bottomRight) && judge(quadTree1.topLeft) && judge(quadTree1.topRight)) {
quadTree1.isLeaf = true;
quadTree1.val = true;
quadTree1.bottomLeft = null;
quadTree1.bottomRight = null;
quadTree1.topLeft = null;
quadTree1.topRight = null;
}
return quadTree1;
}
boolean judge(Node node) {
return node != null && node.isLeaf && node.val;
}
}