Maximum Width of Binary Tree
Description
Given a binary tree, write a function to get the maximum width of the given tree. The maximum width of a tree is the maximum width among all levels.
The width of one level is defined as the length between the end-nodes (the leftmost and right most non-null nodes in the level, where the null
nodes between the end-nodes are also counted into the length calculation.
It is guaranteed that the answer will in the range of 32-bit signed integer.
Example 1:
Input:1 / \ 3 2 / \ \ 5 3 9
Output: 4 Explanation: The maximum width existing in the third level with the length 4 (5,3,null,9).
Example 2:
Input:1 / 3 / \ 5 3
Output: 2 Explanation: The maximum width existing in the third level with the length 2 (5,3).
Example 3:
Input:1 / \ 3 2 / 5
Output: 2 Explanation: The maximum width existing in the second level with the length 2 (3,2).
Example 4:
Input:1 / \ 3 2 / \ 5 9 / \ 6 7
Output: 8 Explanation:The maximum width existing in the fourth level with the length 8 (6,null,null,null,null,null,null,7).
Constraints:
- The given binary tree will have between
1
and3000
nodes.
Solution(javascript)
// 记录每个 node 的序号,然后计算每一层的宽度
const widthOfBinaryTree = function (root) {
if (!root) {
return 0
}
root.id = BigInt(1)
let current = [root]
let max = 1
while (current.length > 0) {
const next = []
max = Math.max(
max,
Number(current[current.length - 1].id - current[0].id) + 1,
)
current.forEach((node) => {
if (node.left) {
node.left.id = node.id * BigInt(2)
next.push(node.left)
}
if (node.right) {
node.right.id = node.id * BigInt(2) + BigInt(1)
next.push(node.right)
}
})
current = next
}
return max
}