給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
例如:給定二叉樹 [3,9,20,null,null,15,7],
# 判斷當前節點的層數 是否大於 result中的列表數
if layer >
len(result)
:# 若是 則在result的前部增加乙個列表
result.insert(0,
)# 將該節點的值新增到result中對應的列表
result[
-layer]
# 遞迴
self.recur(node.left, layer +
1, result)
self.recur(node.right, layer +
1, result)
佇列佇列中每個元素為乙個元組,包括節點和節點所在層數
字典
key 是層數 value 是列表 元素為每個節點的值
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
levelorderbottom
(self, root: treenode)
-> list[list[
int]]:
ifnot root:
return
l =[(root,1)
]
d =while l:
node, layer = l.pop(0)
if d.__contains__(layer)
: d[layer]
else
: d[layer]
=[node.val]
if node.left:
(node.left, layer +1)
)if node.right:
(node.right, layer +1)
)
result =
layers =
sorted
(d.keys())
while layers:
layer = layers.pop(
)
)return result
在每次進入迴圈後,彈出這一層的所有節點
# definition for a binary tree node.
# class treenode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
class
solution
:def
levelorderbottom
(self, root: treenode)
-> list[list[
int]]:
ifnot root:
return
l =[root]
result =
while l:
temp =
n =len(l)
for i in
range
(n):
node = l.pop(0)
if node.left:
if node.right:
result.insert(
0, temp)
return result
107 二叉樹的層次遍歷 II
給定乙個二叉樹,返回其節點值自底向上的層次遍歷。即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回其自底向上的層次遍歷為 15,7 9,20 3 解法一 definition for a binary tr...
107 二叉樹的層次遍歷 II
給定乙個二叉樹,返回其節點值自底向上的層次遍歷。即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 157返回其自底向上的層次遍歷為 15 7 9,20 3 這個遍歷與普通的層次遍歷差別在與需要返回的值的順序是相反的,我...
107二叉樹的層次遍歷II
給定乙個二叉樹,返回其節點值自底向上的層次遍歷。即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷 還是層次遍歷的寫法,遞迴非遞迴都可。最後用collections.reverse 翻轉list,或者在建立鍊錶時用linkedlist,用addfirst的api,每次都在首部增加list。pub...