558.四叉树交集
链接:558.四叉树交集
难度:Medium
标签:树、分治
简介:请你返回一个表示 n * n 二进制矩阵的四叉树,它是 quadTree1 和 quadTree2 所表示的两个二进制矩阵进行 按位逻辑或运算 的结果。
题解 1 - cpp
- 编辑时间:2022-07-15
- 执行用时:24ms
- 内存消耗:16.2MB
- 编程语言:cpp
- 解法介绍:分治,如果一个叶子且 true,则与该节点相同,如果 false,则与另一个节点相同,否则递归。
class Solution {
public:
Node *intersect(Node *quadTree1, Node *quadTree2) {
if (quadTree1->isLeaf) {
if (quadTree1->val)
return new Node(true, true);
else
return new Node(quadTree2->val, quadTree2->isLeaf,
quadTree2->topLeft, quadTree2->topRight,
quadTree2->bottomLeft, quadTree2->bottomRight);
}
if (quadTree2->isLeaf) {
if (quadTree2->val)
return new Node(true, true);
else
return new Node(true, false, quadTree1->topLeft,
quadTree1->topRight, quadTree1->bottomLeft,
quadTree1->bottomRight);
}
Node *tl = intersect(quadTree1->topLeft, quadTree2->topLeft),
*tr = intersect(quadTree1->topRight, quadTree2->topRight),
*bl = intersect(quadTree1->bottomLeft, quadTree2->bottomLeft),
*br = intersect(quadTree1->bottomRight, quadTree2->bottomRight);
if (tl->isLeaf && tr->isLeaf && bl->isLeaf && br->isLeaf &&
tl->val == tr->val && tl->val == bl->val && tl->val == br->val)
return new Node(tl->val, true);
else
return new Node(false, false, tl, tr, bl, br);
}
};