LeetCode 427. 建立四叉树(递归)

1. 题目

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

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

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

给定下面这个8 x 8 网络,我们将这样建立一个对应的四叉树:
在这里插入图片描述

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

在这里插入图片描述

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

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

提示:
N 将小于 1000 且确保是 2 的整次幂。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-quad-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 递归建树

// Definition for a QuadTree node.
class Node {
public:bool val;bool isLeaf;Node* topLeft;Node* topRight;Node* bottomLeft;Node* bottomRight;Node() {}Node(bool _val, bool _isLeaf, Node* _topLeft, Node* _topRight, Node* _bottomLeft, Node* _bottomRight) {val = _val;isLeaf = _isLeaf;topLeft = _topLeft;topRight = _topRight;bottomLeft = _bottomLeft;bottomRight = _bottomRight;}
};
class Solution {Node* r;
public:Node* construct(vector<vector<int>>& grid) {int m = grid.size();r = build(grid,0,0,m-1,m-1);return r;}Node* build(vector<vector<int>>& grid, int sx, int sy, int ex, int ey) {if(sx == ex || sy == ey)//只有1个单元了,不能划分了return new Node(grid[sx][sy],true,0,0,0,0);int mx = (sx+ex)/2, my = (sy+ey)/2;Node *root = new Node(true,true,0,0,0,0);//默认是叶子节点,val值是1int b1, b2, b3, b4;//是全1?全0?两种都有?b1 = judge(grid,sx,sy,mx,my);b2 = judge(grid,sx,my+1,mx,ey);b3 = judge(grid,mx+1,sy,ex,my);b4 = judge(grid,mx+1,my+1,ex,ey);if(b1==1 && b2==1 && b3==1 && b4==1){	//全1return root;}else if(b1==0 && b2==0 && b3==0 && b4==0){	//全0root->val = false;return root;}else{	//0,1都有root->isLeaf = false;root->topLeft = build(grid,sx,sy,mx,my);root->topRight = build(grid,sx,my+1,mx,ey);root->bottomLeft = build(grid,mx+1,sy,ex,my);root->bottomRight = build(grid,mx+1,my+1,ex,ey);return root;}}int judge(vector<vector<int>>& grid, int sx, int sy, int ex, int ey){int i, j;bool allone = 1, allzero = 1;for(i = sx; i <= ex; ++i)for(j = sy; j <= ey; ++j)if(grid[i][j] == 0){allone = false;}else{allzero = false;}if(allone^allzero)//全0或者全1{if(allone)return 1;//全1if(allzero)return 0;//全0}return -1;//0,1都有}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 KIF 的 iOS UI 自动化测试和持续集成

客户端 UI 自动化测试是大多数测试团队的研究重点&#xff0c;本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程。 一、测试框架的选择 iOS UI 自动化测试框架有不少&#xff0c;其中 UI Automation 是 Apple 早期提供的 UI 自动化测试解决…

论文浅尝 | 利用冻结语言模型的多模态少样本学习

笔记整理 | 李磊&#xff0c;浙江大学硕士&#xff0c;研究方向为自然语言处理链接&#xff1a;https://arxiv.org/abs/2106.13884动机大规模的自回归语言模型&#xff08;如GPT&#xff09;在预训练阶段学习到了大量的知识&#xff0c;具有很好的学习新任务的能力&#xff0c…

ACL’21 | 对话系统也要进军多模态了!

文 | 胡煌&#xff0c;梁祖杰编 | 小轶对于一个对话Bot来讲&#xff0c;拥有对视觉信息的感知和联想能力是非常重要的。比如&#xff0c;我们人类在对话中谈到大海的时候&#xff0c;就会自然地联想到蓝天、白云和飞翔的海鸟。然而&#xff0c;当前的对话模型&#xff0c;如 Me…

x86系统与arm64系统不兼容的linux服务器问题

一键离线安装命令&#xff1a; pip install --no-index --find-links/home/digital_package -r requirements.txt --ignore-installed 1 cython 2 gensim&#xff1a;

LeetCode 541. 反转字符串 II

1. 题目 给定一个字符串和一个整数 k&#xff0c;你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符&#xff0c;则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符&#xff0c;则反转前 k 个字符&#xff0c;并将剩余的字符保…

HDFS NameNode内存全景

一、概述 从整个HDFS系统架构上看&#xff0c;NameNode是其中最重要、最复杂也是最容易出现问题的地方&#xff0c;而且一旦NameNode出现故障&#xff0c;整个Hadoop集群就将处于不可服务的状态&#xff0c;同时随着数据规模和集群规模地持续增长&#xff0c;很多小量级时被隐藏…

OpenKG开源系列|首个多模态开放知识图谱OpenRichpedia (东南大学)

OpenKG地址&#xff1a;http://openkg.cn/dataset/richpeidaGitHub地址&#xff1a;https://github.com/OpenKG-ORG/OpenRichpediaGitee地址&#xff1a;https://gitee.com/openkg/richpedia官网地址&#xff1a;http://richpedia.cn&#xff08;提供Dump&#xff09;开放许可协…

电商业务中的五大机器学习问题!

机器学习正在从曾经的“科幻”&#xff0c;走向大众生活&#xff0c;比如&#xff1a;高铁站的人脸识别系统、小区门口的无人化测量体温&#xff0c;还有这些年很火的自动驾驶&#xff0c;再到电商的精准推荐系统...等等&#xff0c;背后都是机器学习。今天就以电商业务场景为例…

LeetCode 404. 左叶子之和(递归)

1. 题目 计算给定二叉树的所有左叶子之和。 示例&#xff1a;3/ \9 20/ \15 7在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.co…

论文浅尝 | 将结构预测作为增广自然语言间的翻译任务

笔记整理 | 叶宏彬&#xff0c;浙江大学计算机博士生论文地址&#xff1a;https://openreview.net/pdf?idUS-TP-xnXI摘要&#xff1a;我们提出了一个新的框架&#xff0c;即增强自然语言之间的翻译&#xff08;Translation-between-Augmented Natural Languages&#xff0c;TA…

ReactiveCocoa中潜在的内存泄漏及解决方案

ReactiveCocoa是GitHub开源的一个函数响应式编程框架&#xff0c;目前在美团App中大量使用。用过它的人都知道很好用&#xff0c;也确实为我们的生活带来了很多便利&#xff0c;特别是跟MVVM模式结合使用&#xff0c;更是如鱼得水。不过刚开始使用的时候&#xff0c;可能容易疏…

EXCEL如何快速拆分合并单元格数据

EXCEL如何快速拆分合并单元格数据

学完文本知识,我就直接看懂图片了!

文 | Yimin_饭煲2020年, OpenAI的大作GPT-3 (Language Models are few shot learners) 横空出世&#xff0c;震惊整个NLP/AI圈。大家在惊叹于GPT-3 1750B参数的壕无人性同时&#xff0c;想必对GPT-3中的Prompt方法印象深刻。简单来说&#xff0c;(GPT-3中的)Prompt就是为输入的…

LeetCode 914. 卡牌分组(最大公约数)

1. 题目 给定一副牌&#xff0c;每张牌上都写着一个整数。 此时&#xff0c;你需要选定一个数字 X&#xff0c;使我们可以将整副牌按下述规则分成 1 组或更多组&#xff1a; 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X > 2 时返回 true。 示例…

RestQL:现代化的 API 开发方式

koa-restql 已经在 github 开源并在 npm 发布。感兴趣的同学可以前往围观一下。欢迎 Pull Request&#xff0c;同时热烈欢迎 Star。 在现代的业务系统中&#xff0c;后端开发工作基本上可以被拆分为三项&#xff1a; 接口鉴权。例如判断是不是当前系统的用户&#xff0c;以及该…

论文浅尝 | KnowEdu: 一个自动构建教育知识图谱的系统

笔记整理 | 崔凌云&#xff0c;天津大学硕士链接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber8362657动机基于知识图的广泛应用和在教育领域日益增长的需求&#xff0c;作者提出了一个名为KnowEdu的系统&#xff0c;以自动构建教育知识图。通过利用教育…

我在斯坦福做科研的碎碎念

文 | Jazon编 | 小轶大家好&#xff0c;我是 Jazon。作为 AI 科研工作者&#xff0c;我们的目光不该只聚焦在开发新技术、刷榜打 SoTA 上。学界如职场&#xff0c;还有很多技术之外的软实力需要培养。这篇文章里&#xff0c;我想以我个人的经历作为切入点&#xff0c;聊一聊与此…

论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...

笔记整理 | 李爽&#xff0c;天津大学链接&#xff1a;http://hfbix45521e79b0484907sowxo0fubpp9b6xwx.fiiz.eds.tju.edu.cn/stamp/stamp.jsp?tp&arnumber9359364动机知识图谱 (KG) 嵌入旨在研究嵌入表示以保留 KG 的固有结构。图神经网络(GNN)作为一种有效的图表示技术&…

分布式队列编程优化篇

“分布式队列编程”是一个系列文&#xff0c;之前我们已经发布了《分布式队列编程模型、实战》&#xff0c;主要剖析了分布式队列编程模型的需求来源、定义、结构以及其变化多样性&#xff1b;根据作者在新美大实际工作经验&#xff0c;给出了队列式编程在分布式环境下的一些具…

LeetCode 443. 压缩字符串(双指针)

1. 题目 给定一组字符&#xff0c;使用原地算法将其压缩。 压缩后的长度必须始终小于或等于原数组长度。 数组的每个元素应该是长度为1 的字符&#xff08;不是 int 整数类型&#xff09;。 在完成原地修改输入数组后&#xff0c;返回数组的新长度。 进阶&#xff1a; 你能…