zoukankan      html  css  js  c++  java
  • 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);
        }
    
     
     
    }
    
  • 相关阅读:
    写最简单的jsp判断今天是这个星期的第几天
    用jsp写出记忆曲线的表格(用学习新概念英语做例子)
    使用Eclipse建立web工程
    java最最基础知识(入门必备)
    如何配置eclipse里面的tomcat
    简单的eclipse配置
    简单的jdk配置
    python画图(标记、marker、设置标记大小、marker符号大全)(图文详细入门教程五)
    python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)
    python画图(添加图例、网格)(图文详细入门教程三)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075087.html
Copyright © 2011-2022 走看看