这是一个按级别打印树的 Python 要点。它背后的想法是使用 BFS 并保留一个级别标记整数,该整数标记级别的最后一个节点。这类似于 Naresh 的哨兵方法,但不需要在队列中插入哨兵,因为这是通过级别标记完成的。
该算法的空间复杂度为 O(2tree_height)
# Print tree by levels - using BFS
# Time complexity of O(n)
# Space complexity: O(2^tree_height)
from collections import deque
class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def print_levels_tree(root: Node):
q = deque()
q.append(root)
level, level_marker = 0, 1
while q:
if (level_marker == 0):
level, level_marker = level + 1, len(q)
print("", end = '\n')
level_marker -= 1
node = q.popleft()
if (node is None):
continue
print(node.data, " ", end = '')
q.append(node.left)
q.append(node.right)
# Some examples
tree = Node(19, Node(7, Node(3), Node(11)), Node(19))
print_levels_tree(tree)
left = Node(7, Node(3, Node(2), Node(5)), Node(11, None, Node(17, Node(13))))
tree = Node(19, left, Node(43))
print_levels_tree(tree)
left = Node(7, Node(3, Node(2), Node(5)), Node(11, None, Node(17, Node(13))))
right = Node(43, Node(23, None, Node(37, Node(29, None, Node(31)), Node(41))), Node(47, None, Node(53)) )
tree = Node(19, left, right)
print_levels_tree(tree)
打印如下内容:
19
7 43
3 11 23 47
2 5 17 37 53
如果你想使用\t 分隔符,它看起来像:
19
7 43
3 11 23 47
2 5 17 37 53
此要点可在https://gist.github.com/lopespm/993f0af88cf30b7f8c9e17982518b71b 获得