我正在实现对二叉树的BFS搜索,以解决leetCode上的问题。 leetCode问题是:
说明:
给出一棵二叉树,编写一个函数以获取给定树的最大宽度。树的宽度是所有级别之间的最大宽度。二叉树与完整的二叉树具有相同的结构,但是某些节点为空。
一层的宽度定义为末端节点之间的长度(该层中最左边和最右边的非空节点,其中末端节点之间的空节点也计入长度计算。 / p>
示例:
输入:
1
/ \
3 2
/ \ \
5 3 9
输出:4 说明:第三层中存在的最大宽度为4(5,3,null,9)。
==============
我的Java代码:
const widthOfBinaryTree = (root) => {
let nodeItemList = [{ node: root, index: 0 }];
let ans = 1;
while (nodeItemList.length > 0) {
const newNodeItemList = [];
for (const nodeItem of nodeItemList) {
if (nodeItem.node.left !== null) {
newNodeItemList.push({ node: nodeItem.node.left, index: nodeItem.index * 2 });
}
if (nodeItem.node.right !== null) {
newNodeItemList.push({ node: nodeItem.node.right, index: nodeItem.index * 2 + 1 });
}
}
if (newNodeItemList.length === 0) break;
const begin = newNodeItemList[0].index;
const end = newNodeItemList[newNodeItemList.length - 1].index;
ans = Math.max(ans, end - begin + 1);
nodeItemList = newNodeItemList;
}
return ans;
}
在我自己仔细检查了几次之后,逻辑对我来说是完全可以的。但是它在leetcode的一个特殊测试案例中失败了。
您可以将我的代码粘贴到leetcode中,以查看故障测试用例。 问题链接: https://leetcode.com/problems/maximum-width-of-binary-tree/