用 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

相关文章


有用资源