📅  最后修改于: 2023-12-03 15:28:43.760000             🧑  作者: Mango
本题是关于二叉树的问题,需要求一个二叉树的宽度。
给定一棵二叉树,二叉树的宽度定义为树中某一层节点数最大值,求该二叉树的宽度。
给定一棵二叉树:
1
/ \
2 3
/ \
4 5
二叉树的宽度为 2,因为第 2 层节点数最大。
本题可以使用 BFS(广度优先搜索)实现。将每一层的节点按顺序加入队列,并记录该层节点数。遍历完所有节点后,取最大节点数即为该二叉树的宽度。
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def max_width(root):
if root is None:
return 0
max_width = 0
queue = [(root, 1)]
while queue:
size = len(queue)
max_width = max(max_width, size)
for _ in range(size):
node, index = queue.pop(0)
if node.left:
queue.append((node.left, 2*index))
if node.right:
queue.append((node.right, 2*index+1))
return max_width
代码中使用了一个列表来实现队列,每个元素都是一个二元组,第一个元素表示节点,第二个元素表示该节点的下标。通过这种方式可以方便地计算出节点在二叉树中的位置。
本题考查了对二叉树的理解以及 BFS 的使用,需要留意根据题目需要自己实现队列。