我們想要使用一棵四叉樹來儲存乙個n x n
的布林值網路。網路中每一格的值只會是真或假。樹的根結點代表整個網路。對於每個結點, 它將被分等成四個孩子結點直到這個區域內的值都是相同的.
每個結點還有另外兩個布林變數:isleaf
和val
。isleaf
當這個節點是乙個葉子結點時為真。val
變數儲存葉子結點所代表的區域的值。
你的任務是使用乙個四叉樹表示給定的網路。下面的例子將有助於你理解這個問題:
給定下面這個8 x 8
網路,我們將這樣建立乙個對應的四叉樹:
由上文的定義,它能被這樣分割:
對應的四叉樹應該像下面這樣,每個結點由一對(isleaf, val)
所代表.
對於非葉子結點,val
可以是任意的,所以使用*
代替。
def
construct
(self, grid)
:"""
:type grid: list[list[int]]
:rtype: node
"""import numpy as np #引入numpy
iflen
(grid)==1
:#矩陣為1階
return node(grid[0]
[0],
true
,none
,none
,none
,none
) real =
false
fatal =
false
for row in grid:
#判斷當前矩陣的真假值
iftrue
in row:
real =
true
iffalse
in row:
fatal =
true
if real and fatal:
break
if real and
not fatal:
#當前矩陣為真
return node(
true
,true
,none
,none
,none
,none)if
not real and fatal:
#當前矩陣為假
return node(
false
,true
,none
,none
,none
,none
)if real and fatal:
#當前矩陣既包含真值又包含假值
grid = np.array(grid)
#二維列表轉陣列,方便下標操作
topleft = self.construct(grid[0:
len(grid)//2
,0:len
(grid)//2
].tolist())
topright = self.construct(grid[0:
len(grid)//2
,len
(grid)//2
:].tolist())
bottomleft = self.construct(grid[
len(grid)//2
:,0:
len(grid)//2
].tolist())
bottomright = self.construct(grid[
len(grid)//2
:,len(grid)//2
:].tolist())
return node(
"*",
false
, topleft, topright, bottomleft, bottomright)
def
construct
(self, grid)
:"""
:type grid: list[list[int]]
:rtype: node
"""iflen
(grid)==1
:#矩陣為1階
return node(grid[0]
[0],
true
,none
,none
,none
,none
) real =
false
fatal =
false
for row in grid:
#判斷當前矩陣的真假值
iftrue
in row:
real =
true
iffalse
in row:
fatal =
true
if real and fatal:
break
if real and
not fatal:
#當前矩陣為真
return node(
true
,true
,none
,none
,none
,none)if
not real and fatal:
#當前矩陣為假
return node(
false
,true
,none
,none
,none
,none
)if real and fatal:
#當前矩陣既包含真值又包含假值,將矩陣等分四份
topleft = self.construct(
[row[0:
len(grid)//2
]for row in grid[0:
len(grid)//2
]]) topright = self.construct(
[row[
len(grid)//2
:]for row in grid[0:
len(grid)//2
]]) bottomleft = self.construct(
[row[0:
len(grid)//2
]for row in grid[
len(grid)//2
:]])
bottomright = self.construct(
[row[
len(grid)//2
:]for row in grid[
len(grid)//2
:]])
return node(
"*",
false
, topleft, topright, bottomleft, bottomright)
演算法題來自:
427 建立四叉樹
我們想要使用一棵四叉樹來儲存乙個n x n的布林值網路。網路中每一格的值只會是真或假。樹的根結點代表整個網路。對於每個結點,它將被分等成四個孩子結點直到這個區域內的值都是相同的.每個結點還有另外兩個布林變數 isleaf和val。isleaf當這個節點是乙個葉子結點時為真。val變數儲存葉子結點所代...
Leetcode 427 建立四叉樹
我們想要使用一棵四叉樹來儲存乙個 n x n 的布林值網路。網路中每一格的值只會是真或假。樹的根結點代表整個網路。對於每個結點,它將被分等成四個孩子結點直到這個區域內的值都是相同的.每個結點還有另外兩個布林變數 isleaf 和 val。isleaf 當這個節點是乙個葉子結點時為真。val 變數儲存...
二叉樹的建立(python)
1 構造器,定義乙個構造器,用來構造樹。2 向樹中新增資料。如圖我們定義了這樣一顆二叉樹,我們用 來建立它 用 實現,如下 coding utf 8 class treenode object def init self,data none,left none,right none self.dat...