面试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)
相关推荐
西西弗Sisyphus20 小时前
线性代数 - 线性方程组的原始解法(高斯消元法)
线性代数·矩阵·线程方程组
kyle~1 天前
数学基础---刚体变换(旋转矩阵与平移矩阵)
线性代数·矩阵·机器人·旋转矩阵·平移矩阵
Olafur_zbj1 天前
【IC】NoC设计入门 --交换矩阵
线性代数·矩阵
xier_ran2 天前
Transformer:Decoder 中,Cross-Attention 所用的 K(Key)和 V(Value)矩阵,是如何从 Encoder 得到的
深度学习·矩阵·transformer
西西弗Sisyphus2 天前
线性代数 - LU分解(LU-Factorization、LU Decomposition)
线性代数·矩阵·矩阵分解
不觉晚秋2 天前
极限挑战之一命速通哈夫曼树
c语言·数据结构··哈夫曼树
西西弗Sisyphus2 天前
线性代数 - 矩阵求逆
线性代数·矩阵·矩阵求逆·逆矩阵·单位矩阵
无风听海2 天前
神经网络之正交矩阵
人工智能·神经网络·矩阵
巴里巴气3 天前
第73题 矩阵置零
线性代数·算法·矩阵
短视频矩阵源码定制3 天前
矩阵系统软件哪家好?2025年选型指南与深度品牌剖析
线性代数·矩阵