算法与数据结构计算二叉树的最大宽度
时间: 2023-11-29 19:23:15 浏览: 116
假设二叉树采用链接存储结构存储,设计一个算法,求二叉树b的宽度.docx
二叉树的最大宽度可以通过层次遍历来计算。具体步骤如下:
1. 定义一个队列,将根节点入队。
2. 对于每一层,记录队列中元素个数,这个值就是该层的宽度。
3. 在遍历完当前层的所有节点后,将下一层的所有节点入队。
4. 不断重复步骤2和3,直到遍历完整棵树。
5. 在所有层的宽度中找到最大值,即为二叉树的最大宽度。
下面是 Python 代码实现:
```python
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def max_width(root: Node) -> int:
if not root:
return 0
queue = [root]
max_width = 1
while queue:
level_width = len(queue)
for i in range(level_width):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
if len(queue) > 0:
max_width = max(max_width, len(queue))
return max_width
```
其中,`Node` 是树节点的类,`max_width` 是计算最大宽度的函数。该函数的时间复杂度为 $O(n)$,其中 $n$ 是二叉树的节点数。
阅读全文