ID | Title | Difficulty | |
---|---|---|---|
Loading... |
662. Maximum Width of Binary Tree
Medium
LeetCode
Tree, Depth-First Search, Breadth-First Search, Binary Tree
Problem
Given the root of a binary tree, return 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 rightmost non-null nodes), 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: root = [1,3,2,5,3,null,9]
Output: 4
Explanation: The maximum width existing in the third level with the length 4 (5,3,null,9).
Example 2:
Input: root = [1,3,null,5,3]
Output: 2
Explanation: The maximum width existing in the third level with the length 2 (5,3).
Example 3:
Input: root = [1,3,2,5]
Output: 2
Explanation: The maximum width existing in the second level with the length 2 (3,2).
Example 4:
Input: root = [1,3,2,5,null,null,9,6,null,null,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 number of nodes in the tree is in the range [1, 3000].
- -100 <= Node.val <= 100
Code
如果节点 x 的 index 记为 i, 那么它的两个子节点的 index 是 2i 和 2i + 1
class Solution {
class DataNode {
TreeNode node;
int index;
public DataNode(TreeNode node, int index) {
this.node = node;
this.index = index;
}
}
public int widthOfBinaryTree(TreeNode root) {
if (root == null) return 0;
Queue<DataNode> queue = new LinkedList<>();
int maxWidth = 0;
queue.offer(new DataNode(root, 0));
while (!queue.isEmpty()) {
int size = queue.size();
int headIndex = -1;
int tailIndex = -1;
for (int i = 0; i < size; i++) {
DataNode dataNode = queue.poll();
TreeNode node = dataNode.node;
int index = dataNode.index;
if (i == 0) {
headIndex = index;
}
tailIndex = index;
if (node.left != null) {
queue.offer(new DataNode(node.left, 2 * index));
}
if (node.right != null) {
queue.offer(new DataNode(node.right, 2 * index + 1));
}
}
maxWidth = Math.max(maxWidth, tailIndex - headIndex + 1);
}
return maxWidth;
}
}
按 <- 键看上一题!
661. Image Smoother
按 -> 键看下一题!
663. Equal Tree Partition