|
@@ -0,0 +1,40 @@
|
|
|
+/*
|
|
|
+// 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 construct(int[][] grid) {
|
|
|
+ return construct(grid, 0, 0, grid.length);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Node construct(int[][] grid, int x, int y, int n) {
|
|
|
+ if (n == 1)
|
|
|
+ return new Node(grid[y][x] == 1, true, null, null, null, null);
|
|
|
+ n /= 2;
|
|
|
+ Node tl = construct(grid, x, y, n);
|
|
|
+ Node tr = construct(grid, x + n, y, n);
|
|
|
+ Node bl = construct(grid, x, y + n, n);
|
|
|
+ Node br = construct(grid, x + n, y + n, n);
|
|
|
+ if (tl.isLeaf && tr.isLeaf && bl.isLeaf && br.isLeaf && tl.val == tr.val && tr.val == bl.val && bl.val == br.val)
|
|
|
+ return new Node(tl.val, true, null, null, null, null);
|
|
|
+ return new Node(true, false, tl, tr, bl, br);
|
|
|
+ }
|
|
|
+}
|