📅  最后修改于: 2023-12-03 15:06:40.430000             🧑  作者: Mango
这个题目要求我们交替顺序打印二叉树每一层的极值节点。也就是说我们需要找到每一层中最大和最小的节点,然后交替打印它们。这个问题其实也可以看作是一个树的遍历问题,我们可以使用广度优先搜索 (BFS) 来进行实现。
要实现这个功能,我们需要按照层次遍历二叉树,并记录每一层的最大和最小值。我们可以使用一个队列来存储当前层的所有节点。然后遍历这个队列,找到该层的最大和最小值。最后交替打印这些值即可。
具体实现流程如下:
下面是 Python 代码的实现,其中使用了 queue 模块来定义队列:
import queue
def print_extreme_node(root):
if not root:
return []
q = queue.Queue()
q.put(root)
level = 0
result = []
while not q.empty():
level += 1
level_max = float('-inf')
level_min = float('inf')
level_size = q.qsize()
for i in range(level_size):
node = q.get()
level_max = max(level_max, node.val)
level_min = min(level_min, node.val)
if node.left:
q.put(node.left)
if node.right:
q.put(node.right)
if level % 2 == 0:
result.append(level_max)
result.append(level_min)
else:
result.append(level_min)
result.append(level_max)
return result
由于我们需要遍历每个节点一次,因此时间复杂度为 $O(n)$,其中 $n$ 为节点总数。同时,我们需要使用一个队列来存储每一层的节点,因此空间复杂度也为 $O(n)$。