LeetCode Java刷题笔记—662. 二叉树最大宽度
Posted 刘Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—662. 二叉树最大宽度相关的知识,希望对你有一定的参考价值。
给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。
每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。
中等难度。我们使用层序遍历,同时记住每一个节点在当前层的索引位置即可,每层遍历完毕,使用最右节点的索引位置减去最左节点的索引位置再+1即为每层的最大宽度。
public int widthOfBinaryTree(TreeNode root)
if (root == null) return 0;
//元素队列
LinkedList<TreeNode> nodeQueue = new LinkedList<>();
//元素对应的索引位置队列
LinkedList<Integer> indexQueue = new LinkedList<>();
nodeQueue.addLast(root);
indexQueue.addLast(1);
//最大宽度
int max = 1;
while (!nodeQueue.isEmpty())
int size = nodeQueue.size();
//每一行的最左节点索引left,最右节点索引right
int left = 0, right = 0;
for (int i = 0; i < size; i++)
TreeNode node = nodeQueue.removeFirst();
int index = indexQueue.removeFirst();
//起始索引
if (i == 0)
left = index;
//结束索引
if (i == size - 1)
right = index;
//子节点的左子节点
if (node.left != null)
nodeQueue.addLast(node.left);
//子节点的左子节点的位置
indexQueue.addLast(2 * index);
if (node.right != null)
nodeQueue.addLast(node.right);
//子节点的右子节点的位置
indexQueue.addLast(2 * index + 1);
//计算最大宽度
max = Math.max(max, right - left + 1);
return max;
以上是关于LeetCode Java刷题笔记—662. 二叉树最大宽度的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—111. 二叉树的最小深度