Я пытался решить проблему Обход порядка двоичного дерева - LeetCode
Для заданного двоичного дерева вернуть уровень порядка обход значений его узлов. (то есть слева направо, уровень за уровнем).
Например:
Дано бинарное дерево [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
возвращает порядок обхода уровня как:
[
[3],
[9,20],
[15,7]
]
Мое решение интуитивно понятно, BFS отслеживает и собирает значения на каждом уровне
from collections import deque
class Solution:
def levelOrder(self, root):
if not root: return [] #base case
res = []
#queue to colloct all the nodes
queue = deque([root])
while queue:
level_vals = [] #hold the values at the current level.
for _ in range(len(queue)): #evalute once before execution enter the loop
cur = queue.popleft()
if node.left:
queue.append(cur.left)
if node.right:
queue.append(cur.right)
level_vals.append(cur.val)
res.append(level_vals)
return res
Я прочитал такое решение bfs и queue в Области обсуждения
# BFS + deque
def levelOrder(self, root):
res, queue = [], deque([(root, 0)])
while queue:
cur, level = queue.popleft()
if cur:
if len(res) < level+1:
res.append([])
res[level].append(cur.val)
queue.append((cur.left, level+1))
queue.append((cur.right, level+1))
return res
Я запутался с проверкой состояния if len(res) < level+1: res.append([])
и подумал, что это может быть '
if cur:
#if len(res) < level+1:
res.append([])
res[level].append(cur.val)
queue.append((cur.left, level+1))
queue.append((cur.right, level+1))
return res
Зачем нужна проверка состояния?