问题描述
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度需要定义为树中任意两个叶节点之间的最大距离。这个距离是沿着从根到叶子节点路径的水平距离。
例如,给定的二叉树:
1
/ \
3 2
/ \ \
5 3 9
最大宽度是 4 (5, 3, 9 是最宽的)。
二叉树的序列化输入是一个列表,其中空节点用 null
表示。
解法一
解题思路:
为了解决这个问题,我们可以使用层序遍历(BFS)。在遍历的过程中,我们可以记录每一层的节点数量,然后找到宽度最大的那一层。
/*
* @lc app=leetcode.cn id=662 lang=javascript
*
* [662] Maximum Width of Binary Tree
*/
// @lc code=start
function widthOfBinaryTree(root) {
if (!root) return 0;
let queue = [[root, 0]];
let maxWidth = 0;
while (queue.length) {
const levelSize = queue.length;
let left = queue[0][1];
let right = left;
for (let i = 0; i < levelSize; i++) {
const [node, pos] = queue.shift();
if (node.left) queue.push([node.left, pos * 2 + 1]);
if (node.right) queue.push([node.right, pos * 2 + 2]);
right = pos;
}
maxWidth = Math.max(maxWidth, right - left + 1);
}
return maxWidth;
}
// @lc code=end