class BinaryTreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def level_order_traversal(root):
q = []
result = []
if not root:
return result
q.append(root)
while q:
temp_q = []
res_q = []
node = q.pop(0)
res_q.append(node.value)
if node.left:
temp_q.append(node.left)
if node.right:
temp_q.append(node.right)
q = temp_q
result.append(res_q)
return result
if __name__ == "__main__":
result = level_order_traversal([0, 1, None, None, 2, 4, None, None, 3])
print(result)
@Welbog: Спасибо, что помогаете! есть ли способ передать BinaryTreeNode в качестве аргумента для level_order_traversal()?
Сайты с вызовами кода часто преобразуют входные данные JSON в экземпляр данного класса — в данном случае это BinaryTreeNode
с вложенными экземплярами одного и того же класса.
Как только вы решите протестировать свой код вне рамок проверки кода, вам придется сделать эту подготовку самостоятельно. Если вы хотите, чтобы он работал со списком в качестве входных данных, добавьте эту вспомогательную функцию в свой набор инструментов:
def to_binary_tree(items):
if not items:
return None
it = iter(items)
root = BinaryTreeNode(next(it))
q = [root]
for node in q:
val = next(it, None)
if val is not None:
node.left = BinaryTreeNode(val)
q.append(node.left)
val = next(it, None)
if val is not None:
node.right = BinaryTreeNode(val)
q.append(node.right)
return root
И теперь вы можете сделать:
if __name__ == "__main__":
result = level_order_traversal(to_binary_tree([0, 1, None, None, 2, 4, None, None, 3]))
print(result)
level_order_traversal
ожидает, что типroot
будетBinaryTreeNode
, но вы передаете ему список.