面试150 建立四叉树

思路

采用递归分治的思路构建四叉树。首先判断当前区域内的值是否全部相同,若是,则构建一个叶子节点;若否,则将区域划分为四个子区域(左上、右上、左下、右下),对每个子区域递归构建对应的子节点,并将其作为当前非叶子节点的四个子树。通过不断划分和合并,实现将二维网格压缩为一棵结构紧凑的四叉树。

python 复制代码
"""
# Definition for a QuadTree node.
class Node:
    def __init__(self, val, isLeaf, topLeft, topRight, bottomLeft, bottomRight):
        self.val = val
        self.isLeaf = isLeaf
        self.topLeft = topLeft
        self.topRight = topRight
        self.bottomLeft = bottomLeft
        self.bottomRight = bottomRight
"""

class Solution:
    def construct(self, grid: List[List[int]]) -> 'Node':
        n=len(grid)
        def isSame(x,y,size):
            val=grid[x][y]
            for i in range(x,x+size):
                for j in range(y,y+size):
                    if grid[i][j]!=val:
                        return False,val
            return True,val
        
        def build(x,y,size):
            same,val=isSame(x,y,size)
            if same:
                return Node(val==1,True)
            else:
                half=size//2
                return Node(
                    val=True,
                    isLeaf=False,
                    topLeft=build(x,y,half),
                    topRight=build(x,y+half,half),
                    bottomLeft=build(x+half,y,half),
                    bottomRight=build(x+half,y+half,half)
                )
        return build(0,0,n)
相关推荐
WitsMakeMen21 小时前
用矩阵实例具象化 RankMixer 核心机制
人工智能·线性代数·矩阵·llm
程序员-King.1 天前
day128—二分查找—搜索二维矩阵(LeetCode-74)
leetcode·矩阵·二分查找
你要飞1 天前
考研线代第四课:线性方程组
笔记·线性代数·考研·矩阵
恶魔泡泡糖2 天前
51单片机矩阵按键
c语言·算法·矩阵·51单片机
赵域Phoenix2 天前
图网络的度矩阵D/邻接矩阵A/拉普拉斯矩阵L以及图中的节点如何各自保存更新节点特征
线性代数·矩阵
求梦8202 天前
【力扣hot100题】搜索二维矩阵II(16)
算法·leetcode·矩阵
小雨下雨的雨2 天前
Flutter鸿蒙共赢——逻辑的繁花:初等元胞自动机与 Rule 7 的矩阵美学
线性代数·flutter·华为·矩阵·交互·harmonyos·鸿蒙系统
知乎的哥廷根数学学派2 天前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
你要飞3 天前
考研线代第三课:向量组
笔记·线性代数·考研·矩阵
aigcapi3 天前
AI 获客系统哪个好?矩阵系统哪个好?2026 客观测评 TOP4
大数据·人工智能·矩阵