662. Maximum Width of Binary Tree

Average Rating: 2.15 (41 votes)

Dec. 10, 2017 | 18.5K views

Given a binary tree, write a function to get the maximum width of the given tree. The width of a tree is the maximum width among all levels. The binary tree has the same structure as a full binary tree, but some nodes are null.

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.

Approach Framework

Explanation

As we need to reach every node in the given tree, we will have to traverse the tree, either with a depth-first search, or with a breadth-first search.

The main idea in this question is to give each node a position value. If we go down the left neighbor, then position -> position * 2; and if we go down the right neighbor, then position -> position * 2 + 1. This makes it so that when we look at the position values L and R of two nodes with the same depth, the width will be R - L + 1.

Approach #1: Breadth-First Search [Accepted]

Intuition and Algorithm

Traverse each node in breadth-first order, keeping track of that node's position. For each depth, the first node reached is the left-most, while the last node reached is the right-most.

Complexity Analysis

Time Complexity: where is the number of nodes in the input tree. We traverse every node.

Space Complexity: , the size of our queue.

Approach #2: Depth-First Search [Accepted]

Intuition and Algorithm

Traverse each node in depth-first order, keeping track of that node's position. For each depth, the position of the first node reached of that depth will be kept in left[depth].

Then, for each node, a candidate width is pos - left[depth] + 1. We take the maximum of the candidate answers.

Complexity Analysis

Time Complexity: where is the number of nodes in the input tree. We traverse every node.