news 2026/6/26 10:24:29

LeetCode 427:Construct Quad Tree 题解与两种思路对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 427:Construct Quad Tree 题解与两种思路对比

LeetCode 427 要求:给定一个只包含 0 和 1 的 n×n 矩阵 grid,用四叉树来表示这个矩阵,并返回四叉树的根节点。 四叉树中每个内部节点恰好有 4 个子节点(左上、右上、左下、右下),每个节点包含两个关键属性:val 和 isLeaf。leetcode​

val:如果该节点表示的区域全是 1,则为 True;如果全是 0,则为 False;当 isLeaf == False 时,val 取 True/False 都行,不影响答案。leetcode​

isLeaf:如果该节点是叶子节点(没有子节点),为 True;如果有四个子节点,为 False。leetcode​

题目给出的构造规则是标准的递归划分流程:如果当前区域所有值相同,就把它变成一个叶子节点;否则把区域划分成四个等大的子区域,分别递归构建四个子树。algo+1​


方法一:自顶向下的经典 Divide & Conquer

大部分官方/题解网站推荐的写法,都是自顶向下 + Divide & Conquer。sparkcodehub+2​

核心思路:

  1. 针对当前子矩形(比如用左上角坐标和边长来表示),先扫描这一块区域,判断是否「全 0」或「全 1」。
  2. 如果是「全相同」,直接构造一个叶子节点isLeaf = true, val = 0/1,返回。
  3. 否则,把这块区域按照中点分成四个等大子区域:topLeft、topRight、bottomLeft、bottomRight,各自递归构造子树。
  4. 返回一个内部节点isLeaf = false,四个子节点挂在对应指针上即可。sparkcodehub+1​

这个方案直接体现了Divide & Conquer的三个步骤:wikipedia+1​

  • Divide:把当前子矩形拆成四个象限。
  • Conquer:递归构造四棵子树。
  • Combine:用这四棵子树组装出当前节点(内部节点或叶子节点)。

很多时候大家会以为「Divide & Conquer 就是先分到不能再分,然后在合并阶段做大量工作」,比如归并排序的感觉。 实际上,教科书定义只要求「拆成子问题 → 递归求解 → 用子问题的解得到原问题解」,Combine 这一步可以非常轻,比如这里就只是构造一个节点并挂四个子指针而已。scaler+2​

自顶向下的复杂度和优化点

复杂度方面,常见题解一般认为总时间复杂度为 O(n²) 或 O(n² log n) 量级,主要原因是每一层总共访问的格子数是 O(n²),而树的高度是 log n 级别。youtube​algo+1​

真正的优势在于:对于很多「大块区域本来就全 0 或全 1」的情况,自顶向下在很高的层级就直接返回叶子了,不会再把它拆成很多 1×1 小块,递归深度和节点数都大幅减少。algo+1​

所以,自顶向下先判断统一性再分割,既是标准的 Divide & Conquer,也往往更贴近四叉树实际应用中的「自适应划分」风格。pratikpandey.substack+1​


方法二:自底向上的「先分到底,再向上 merge」

你的思路是另一种非常自然的写法,可以概括为:「先把区域一直劈到 1×1,再在回溯阶段尝试合并成更大的叶子」。这也是一种 Divide & Conquer,只是 Combine 做得更"重"一些。neetcode+1​

具体步骤:

  1. 递归时按横纵对半分割当前区域,直到子区域变成 1×1 小格子。
  2. 到 1×1 时,直接用该格子的值构造一个叶子节点,isLeaf = true, val = grid[i][j],返回。
  3. 回溯到上一层时,拿到四个子节点,进入merge 逻辑
    • 如果四个子节点都是叶子且它们的 val 完全相同,那么可以「合并」成一个更大的叶子节点:创建一个新叶子节点,值为这个统一的 0/1,释放或丢弃四个小叶子,返回这个新的大叶子节点。
    • 否则,说明这块区域不是 uniform,就构造一个内部节点isLeaf = false,val 随便设(通常设为 false),把四个子节点挂上去,返回这个内部节点。vultr+1​

只要保证合并条件写对:

  • 四个子节点必须都是叶子;
  • 四个子节点的 val 完全一样;

这个办法与自顶向下的最终树结构是等价的。vultr+1​


两种思路的对比与选择

从算法范式上看,两种写法都符合Divide & Conquer,只是拆分和合并的侧重点不同。wikipedia+1​

维度自底向上:先分到底再 merge自顶向下:先判 uniform 再分
递归过程一路拆到 1×1,再在回溯中判断四叶子能否合并sparkcodehub​先看当前块是否 uniform,非 uniform 才继续拆algo​
Combine 工作量merge 阶段稍重,需要检查 4 个子节点是否都叶子且同值sparkcodehub​Combine 很轻,大多只是 new 一个父节点algo​
uniform 区域处理必须先拆到最小单位再往上合并可能在高层就直接变成叶子,不再继续拆algo+1​
实际推荐程度思路完全正确,可 AC,写法稍微"工程化"一点编辑器官方解、NeetCode 等主流题解更偏向此写法algo+2​

从面试/刷题角度看:

  • 你的方案:非常适合作为「先凭直觉写一个可以工作的版本」,逻辑直接,特别像很多自底向上的 DP。
  • 官方方案:更贴近四叉树的直观定义(当前区域 uniform 就是叶子),也更接近实际工程里构建四叉树的常见方式,因此一般题解、视频教程都会用这一版。grandyang+2​

关于 Divide & Conquer、Top-down 和 Bottom-up 的理解

最后回到你问的那个哲学问题:「自顶向下是不是就不符合 Divide & Conquer?Divide & Conquer 不是要先 split 到不能再 split,然后 merge 吗?」

  1. **Divide & Conquer 的定义只是「拆成子问题 → 递归解决 → 组合答案」,没有规定合并一定发生在"最后一层"。**scaler+1​

  2. 自顶向下 quad tree 构造完全是 Divide & Conquer:在每个节点,要么「不用再分,直接得解」(叶子),要么「拆成 4 个子问题,把 4 个解合起来」;只是合并操作比较轻,不像归并排序那样巨大的 merge 阶段。youtube​algo​

  3. 你的写法则更偏「Bottom-up」,也同样是 Divide & Conquer,只不过把大量工作放到回溯时的 merge 阶段来做。neetcode+1​

如果写成一行总结:

自顶向下 + uniform 检查是更"教科书式"的 Divide & Conquer;自底向下再 merge 是更"工程化"的 Divide & Conquer,两者同属一个范式,只是结构分布不同。algo+2​

实际刷题中,两种写法都可以放心用,你现在这套自底向上的思路逻辑是完全正确的,只要小心合并条件即可。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 3:31:11

Wan2.2-T2V-A14B模型推理性能调优实战技巧分享

Wan2.2-T2V-A14B模型推理性能调优实战技巧分享 在AI生成内容(AIGC)浪潮席卷影视、广告和短视频行业的今天,文本到视频(Text-to-Video, T2V)技术正从实验室原型快速走向商业化落地。相比图像生成,T2V不仅要处…

作者头像 李华
网站建设 2026/6/25 5:16:47

GraniStudio零代码平台调试算子方式有多少种?分别都是如何调试?

GraniStudio零代码平台,分为主动执行和被动执行,执行模式分为 DuBug模式和Release 模式。 可在快捷菜单栏设置调试模式,默认:Debug模式 主动执行 流程配置窗口 主动执行开关打开,将设置为主动执行。 被动执行 流程配置窗口 主动执行开关关闭,将设置为被动执行。 …

作者头像 李华
网站建设 2026/6/26 2:05:02

小米14C刷国际版步骤

​​​​​​https://xiaomirom.com/rom/redmi-14r-5g-poco-m7-5g-14c-5g-flame-india-fastboot-recovery-rom/ 小米14C的价格比较合适。可以买了 6125G的套餐差不多518元。再刷个全球版的ROM。 方便调用和测试。 下载ROM。 https://xiaomirom.com/download-xiaomi-flash-t…

作者头像 李华
网站建设 2026/6/25 21:26:48

智谱开源天团登陆 AtomGit,4 大模型覆盖多模态全场景!

智谱 AI 4 款多模态核心模型在 AtomGit 平台集中开源!基于 Open-AutoGLM 、GLM-4.6V、GLM-ASR-Nano-2512、GLM-TTS 组成的模型矩阵,构建起 “手机操作 视觉理解 语音识别 文本转语音”的全链路多模态 AI 生态。这次开源不仅打破 “AI 只停留在聊天框”…

作者头像 李华
网站建设 2026/6/24 18:43:57

开源视频生成技术再突破:Wan2.1-FLF2V-14B模型实现720P高清流畅过渡

在人工智能生成内容(AIGC)领域,视频生成技术正经历着前所未有的快速发展。其中,首尾帧驱动的视频生成技术因其高效性和易用性,逐渐成为内容创作领域的新宠。近日,Wan团队正式发布了旗下最新力作——Wan2.1-…

作者头像 李华
网站建设 2026/6/25 13:19:13

教学辅助微信小程序设计毕业设计(源码+lw+部署文档+讲解等)

博主介绍:✌ 专注于VUE,小程序,安卓,Java,python,物联网专业,有18年开发经验,长年从事毕业指导,项目实战✌选取一个适合的毕业设计题目很重要。✌关注✌私信我✌具体的问题,我会尽力帮助你。一、…

作者头像 李华