Полагаю, sum
- это максимальное число обходов, которое вы хотите выполнить.
Следующие действия помогут вам:
def traverse(root, limit=None, count=0):
if not root or count == limit:
return []
traversal = [root.val]
traversal += traverse(root.right, limit, count + len(traversal))
traversal += traverse(root.left, limit, count + len(traversal))
return traversal
Тогда вам нужно просто позвонитьэто выглядит так:
root = TreeNode(20)
root.right = TreeNode(40)
root.right.right = TreeNode(50)
root.right.left = TreeNode(30)
root.left = TreeNode(10)
root.left.left = TreeNode(5)
traverse(root) // [20, 40, 50, 30, 10, 5]
traverse(root, limit=1) // [20]
traverse(root, limit=4) // [20, 40, 50, 30]
Или, если вы можете предоставить узлы right
и left
на __init__
, вы можете использовать классный подход функционального стиля:
print(
traverse(
Node(20,
right=Node(40,
right=Node(50),
left=Node(30)),
left=Node(10,
left=Node(5))),
limit=3))
# > [20, 40, 50]