编写计算二叉树最大宽度的算法。(二叉树最大宽度指二叉树所有层中结点个数的最大值)
时间: 2023-12-03 09:46:26 浏览: 105
下面是计算二叉树最大宽度的算法实现,主要思路是使用队列进行层次遍历,并记录每个节点在当前层的位置,然后在每一层结束时计算当前层的宽度并更新最大宽度:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def max_width(root: Node) -> int:
if not root:
return 0
max_width = 1
queue = [(root, 0)]
while queue:
level_size = len(queue)
left, right = queue[0][1], queue[-1][1]
max_width = max(max_width, right - left + 1)
for i in range(level_size):
node, pos = queue.pop(0)
if node.left:
queue.append((node.left, 2 * pos))
if node.right:
queue.append((node.right, 2 * pos + 1))
return max_width
```
其中,`queue`保存了每个节点及其在当前层的位置,`left`和`right`分别记录当前层最左边和最右边的节点的位置,用于计算当前层的宽度。最后返回的是最大宽度。
阅读全文