问:查找二叉树最大宽度的程序

2025年3月17日 | 阅读 8 分钟

说明

在此程序中,我们需要找出二叉树的最大宽度。二叉树的宽度是任何层上存在的节点数。因此,节点数最多的那层就是二叉树的最大宽度。要解决此问题,请逐层遍历树并计算每层的节点数。

Program to find maximum width of a binary tree

在给定的二叉树中,

第 1 层有 1 个节点,因此 maxWidth = 1。
第 2 层有 2 个节点,因此 maxWidth = 2(因为 2 > 1)。
第 3 层有 4 个节点,因此 maxWidth = 4(因为 4 > 2)。
第 4 层有 1 个节点,因此 maxWidth = 4(因为 1 < 4)。

因此,上述二叉树的最大宽度为 4,用白色椭圆表示。

算法

  1. 定义 Node 类,它有三个属性:data、leftright。其中,left 表示节点的左子节点,right 表示节点的右子节点。
  2. 创建节点时,将数据传递给节点的 data 属性,并将 left 和 right 都设置为 null
  3. 定义另一个类,该类有一个 root 属性。
    1. Root 表示树的根节点,并将其初始化为 null。
  4. findMaximumWidth() 将找出给定二叉树的最大宽度
    1. 变量 maxWidth 将存储任何层上存在的最大节点数。
    2. 队列用于逐层遍历二叉树。
    3. 它检查根是否为空,这意味着树是空的。
    4. 如果不是,则将根节点添加到队列。变量 nodesInLevel 用于跟踪每个层上的节点数。
    5. 如果 nodesInLevel > 0,则从队列的前面移除节点,并将其左子节点和右子节点添加到队列中。在第一次迭代中,将移除节点 1,并将其子节点 2 和 3 添加到队列中。在第二次迭代中,将移除节点 2,其子节点 4 和 5 将添加到队列中,依此类推。
    6. MaxWidth 将存储 max(maxWidth, nodesInLevel)。因此,在任何给定时间点,它将表示最大节点数。
    7. 这将一直持续到遍历完树的所有层。

解决方案

Python

输出

Maximum width of the binary tree: 4

C

输出

Maximum width of the binary tree: 4

JAVA

输出

Maximum width of the binary tree: 4

C#

输出

Maximum width of the binary tree: 4

PHP

输出

Maximum width of the binary tree: 4
 
下一个主题程序列表