107 二叉樹的層次遍歷 ii

2021-09-20 15:36:17 字數 2675 閱讀 4862

給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

例如:給定二叉樹 [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...