建立四叉树

2024-03-21 15:44
文章标签 建立 四叉树

本文主要是介绍建立四叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

建立四叉树

题目描述




注意点

  • n == grid.length == grid[i].length
  • n == 2^x 其中 0 <= x <= 6

解答思路

  • 本题相当于要将一个大正方形不断划分为四个小正方形(如果大正方形中元素不完全相同),所以考虑使用分治,思路为:根据top、left和边长确定一个正方形,遍历正方形中每个点的值,如果值都相同说明其为叶子节点,没有子树,将isLeaf和val赋值即可;如果有值不相同说明其含有子树,将isLeaf和val赋值后,还要将当前正方形划分为4个小正方形并重复上述操作

代码

class Solution {public Node construct(int[][] grid) {return divide(grid, 0, 0, grid.length);}public Node divide(int[][] grid, int top, int left, int len) {boolean isLeaf = true;int val = grid[top][left];for (int i = 0; i < len; i++) {for (int j = 0; j < len; j++) {if (grid[top + i][left + j] != val) {isLeaf = false;break;}}if (!isLeaf) {break;}}Node root = new Node();root.isLeaf = isLeaf;root.val = (val == 1);// 方格内元素不同,继续分治if (!isLeaf) {len = len / 2;root.topLeft = divide(grid, top, left, len);root.topRight = divide(grid, top, left + len, len);root.bottomLeft = divide(grid, top + len, left, len);root.bottomRight = divide(grid, top + len, left + len, len);}return root;}
}

关键点

  • 分治思想

这篇关于建立四叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833077

相关文章

建立升序链表

题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2744 解决:1186 题目描述: 建立一个升序链表并遍历输出。 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。 样例输

【内网】ICMP出网ew+pingtunnel组合建立socks5隧道

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 通过环境搭建,满足以下条件: 攻击机模拟公网vps地址,WEB边界服务器(Windows Server 2008)模拟公司对外提供Web服务的机器,该机器可以通内网,同时向公网提供服务。内网同网段存在一台Windows内网服务

【IDEA】建立多个子模块依赖于一个父模块(maven)

第一步,建立父模块(在IDEA中就是工程) 第二步,选中父模块(也就是工程)右键New Module建立子模块 勾选创建模板原型并一般选择 maven-archetype-quickstart,当创建web模块时选择 maven-archetype-webapp 其他子模块都是类似这样创建~ packaging打包类型有: jar,默认类型warejbea

【2024全国大学生数学建模竞赛】B题 模型建立与求解(含代码与论文)

目录 1问题重述1.1问题背景1.2研究意义1.3具体问题 2总体分析3模型假设4符号说明(等四问全部更新完再写)5模型的建立与求解5.1问题一模型的建立与求解5.1.1问题的具体分析5.1.2模型的准备 目前B题第一问的详细求解过程以及对应论文部分已经完成! - 晚上7-8点之前第二问完成 - 明天中文之前全部写完 按照提交论文的格式进行撰写!完整版请看文章最后!

【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程

我想观察UE4是怎么编译的,于是查阅官方文档,了解到UE4有一套自己的编译工具:UnrealBuildTool,简称UBT。关于UBT的官方文档参阅:虚幻编译工具。我想尝试自己手动建立一个使用UBT进行编译的空白工程。不过首先,先了解下UBT的编译流程中一些文件所扮演的角色 UBT的编译流程中一些文件所扮演的角色 模块 每个模块都由一个 .build.cs 文件声明,它存储在 Source

Linux - Tcp连接建立和释放的三次握手四次挥手

一、TCP报文段首部格式         源端口/目的端口:各占2个字节,分别写入源端口和目的端口,端口是传输层与应用层的服务接口    序号:占4个字节,TCP连接中传送的数据流中每一个字节都有一个序号,序号字段指本报文段所发送的数据的第一个字节的序号    确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号    数据偏移:占4个字节,它指出TCP报文的数据距离TCP

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案及代码实现(已经更新完毕) 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别 赛后总

如何把文件夹里的所有文件每个建立一个文件夹,并且以文件的名字命名

如何把文件夹里的所有文件每个建立一个文件夹,并且以文件的名字命名?TOC 你可以把文件归类,然后同类型的文件放在相应的文件夹内,你一定要这样做,那你就不停的按那个新建文件夹快捷菜单,新建n个文件夹,然后按顺序选择文件按F2再按Ctrl+C然后把该文件拉进新建文件夹1然后选择新建文件夹1按F2再按Ctrl+v,其余以此类推。这样做很繁琐的。 新的方法 新建一个空白的txt文件,输入: @ec

LLAMA3.1 8B 本地部署并配合Obsidian建立本地AI知识管理系统

目前,LLAMA3.1模型分为8B、70B、405B三个版本,其中70B和405B对于显存的要求均已超过了一般家用电脑的配置(或者换个说法,用一张4090也是带不起来的),所以运行8B即可。LLAMA3.1 8B的性能约相当于ChatGPT3.5。 经过我的测试4080、2080、intel ultra 9 185H(无独立显卡,其能力约相当于1060)都是可以带得动8B模型的,当然显卡越好,响

starUML建立时序图

http://jingyan.baidu.com/article/46650658339d56f549e5f8d6.html