用 Python 编写程序来查找二叉树的最大宽度
pythonserver side programmingprogramming更新于 2026/1/8 19:56:17
假设我们有一棵二叉树,我们必须找到树中任意一层的最大宽度。这里,级别的宽度是指最左边节点和最右边节点之间可以容纳的节点数。
因此,如果输入如下

则输出为 2
为了解决这个问题,我们将遵循以下步骤−
创建一个映射 d,以保存最小值和最大值,最小值最初为无穷大,最大值为 0
定义一个函数 dfs() 。这将使 root、pos := 0、depth := 0
如果 root 为空,则 o 返回
d[depth, 0] = d[depth,0] 和 pos 的最小值
d[depth, 1] = d[depth,1] 和 pos 的最大值
dfs(节点左侧,2*pos,depth+1)
dfs(节点右侧,2*pos+1,depth+1)
从主方法中,执行以下操作−
dfs(root)
mx:= 0
对于 d 的所有值列表中的每个最小-最大对,执行
左 := 最小值,右 := 最大值
mx:= mx 的最大值,右-左 + 1
返回 mx
让我们看看下面的实现以便更好地理解 −
示例
Live Demo
from collections import defaultdict class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): d=defaultdict(lambda: [1e9,0]) def dfs(node, pos=0, depth=0): if not node: return d[depth][0]=min(d[depth][0],pos) d[depth][1]=max(d[depth][1],pos) dfs(node.left,2*pos,depth+1) dfs(node.right,2*pos+1,depth+1) dfs(root) mx=0 for interval in d.values(): l,r=interval mx=max(mx,r-l+1) return mx ob = Solution() root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8) print(ob.solve(root))
输入
root = TreeNode(5) root.left = TreeNode(1) root.right = TreeNode(9) root.right.left = TreeNode(7) root.right.right = TreeNode(10) root.right.left.left = TreeNode(6) root.right.left.right = TreeNode(8)
输出
2
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

