• Java实现 LeetCode 427 建立四叉树


    427. 建立四叉树

    我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的.

    每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个叶子结点时为真。val 变量储存叶子结点所代表的区域的值。

    你的任务是使用一个四叉树表示给定的网络。下面的例子将有助于你理解这个问题:

    给定下面这个8 x 8 网络,我们将这样建立一个对应的四叉树:

    在这里插入图片描述

    由上文的定义,它能被这样分割:

    在这里插入图片描述

    对应的四叉树应该像下面这样,每个结点由一对 (isLeaf, val) 所代表.

    对于非叶子结点,val 可以是任意的,所以使用 * 代替。
    在这里插入图片描述

    提示:

    N 将小于 1000 且确保是 2 的整次幂。
    其实这个题有一些像前段时间看到得棋盘覆盖

    /*
    // 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() {
            this.val = false;
            this.isLeaf = false;
            this.topLeft = null;
            this.topRight = null;
            this.bottomLeft = null;
            this.bottomRight = null;
        }
        
        public Node(boolean val, boolean isLeaf) {
            this.val = val;
            this.isLeaf = isLeaf;
            this.topLeft = null;
            this.topRight = null;
            this.bottomLeft = null;
            this.bottomRight = null;
        }
        
        public Node(boolean val, boolean isLeaf, Node topLeft, Node topRight, Node bottomLeft, Node bottomRight) {
            this.val = val;
            this.isLeaf = isLeaf;
            this.topLeft = topLeft;
            this.topRight = topRight;
            this.bottomLeft = bottomLeft;
            this.bottomRight = bottomRight;
        }
    };
    */
    class Solution {
          public Node construct(int[][] grid) {
            return construct(grid, 0, grid.length - 1, 0, grid.length - 1);
        }
    
        private Node construct(int[][] grid, int top, int bottom, int left, int right) {
            for (int i = top; i <= bottom; i++) {
                for (int j = left; j <= right; j++) {
                    if (grid[i][j] != grid[top][left]) {
                        Node node = new Node(false, false);
                        int mid1 = top + ((bottom - top) >> 1), mid2 = left + ((right - left) >> 1);
                        node.topLeft = construct(grid, top, mid1, left, mid2);
                        node.topRight = construct(grid, top, mid1, mid2 + 1, right);
                        node.bottomLeft = construct(grid, mid1 + 1, bottom, left, mid2);
                        node.bottomRight = construct(grid, mid1 + 1, bottom, mid2 + 1, right);
                        return node;
                    }
                }
            }
            return new Node(grid[top][left] == 1, true);
        }
    
     
     
    }
    
  • 相关阅读:
    iOS 循环引用 委托 (实例说明)
    【iOS】自动引用计数 (循环引用)
    有关UITableviewCell 重用内存 内部解析
    通用的类->可直接存储的Dictionary,可以被JSON或NSUserDefaults
    ipa 发布到stroe
    根据当前登录域账号 获取AD用户姓名和所在OU目录
    ASP.NET MVC 操作AD 获取域服务器当前用户姓名和OU信息
    各种图标 资源下载
    【赚】cocos2d-x学习资源汇总(持续更新。。。)
    ios网络层优化深入浅出
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075696.html
Copyright © 2020-2023  润新知