0% completed
Problem Statement
Given a root
of the binary tree, connect each node with its level order successor. The last node of each level should point to a null
node.
Examples
Example 1:
- Input: root = [1, 2, 3, 4, 5, 6, 7]
- Output:
[1 -> null] [2 -> 3 -> null] [4 -> 5 -> 6 -> 7 -> null]
- Explanation:
The tree is traversed level by level using BFS. Each node is connected to its next right node at the same level. The last node of each level points tonull
.
Example 2:
- Input: root = [12, 7, 1, 9, null, 10, 5]
- Output:
[12 -> null] [7 -> 1 -> null] [9 -> 10 -> 5 -> null]
- Explanation:
The nodes are connected to their next right sibling at the same level. The last node of each level points tonull
.
Constraints:
- The number of nodes in the tree is in the range [0, 2<sup>12</sup> - 1].
-1000 <= Node.val <= 1000
Solution
To solve this problem, we perform a level order traversal using Breadth-First Search (BFS) while connecting each node to its immediate right neighbor within the same level. We use a queue to keep track of nodes at each level and maintain a previousNode
pointer to establish connections. At the start of each level, previousNode
is set to null
. As we process nodes within the level, we link previousNode.next
to the currentNode
, ensuring all siblings are connected. The previousNode
is then updated to the currentNode
for subsequent connections. Once a node is processed, its left and right children are enqueued so they are available in the next level. The last node of each level remains pointing to null
, marking the end of the level's linked sequence.
This approach ensures that all nodes within the same level are properly connected while preserving the correct order of traversal. Once all levels are processed, the modified tree is returned.
Step-by-Step Algorithm
-
Handle the Base Case:
- If the root is
null
, returnnull
immediately.
- If the root is
-
Initialize BFS:
- Create a queue and enqueue the
root
node.
- Create a queue and enqueue the
-
Process Each Level Iteratively:
- While the queue is not empty:
- Determine
levelSize
, the number of nodes in the current level. - Initialize
previousNode
asnull
to keep track of the last processed node.
- Determine
- While the queue is not empty:
-
Connect Nodes in the Current Level:
- Iterate over all nodes in the current level:
- Dequeue the front node.
- If
previousNode
is notnull
, setpreviousNode.next = currentNode
to connect them. - Update
previousNode
tocurrentNode
to store previously processed node for the next level. - Enqueue the left and right children (if they exist).
- Iterate over all nodes in the current level:
-
Move to the Next Level and Repeat Until the Queue is Empty.
-
Return the Modified Tree Root.
Algorithm Walkthrough
-
Initialize BFS Traversal:
- Start with the root node
12
. - Initialize an empty queue and enqueue
12
.
Queue:
[12]
- Start with the root node
-
Process Level 1 (Root Level):
- Level Size:
1
(only node12
in this level). - Initialize
previousNode = null
. - Dequeue
12
:- Since
previousNode
isnull
, assignpreviousNode = 12
. - Enqueue left child
7
. - Enqueue right child
1
.
- Since
Queue after processing:
[7, 1]
Next Pointer Connection:12 -> null
(last node in level points tonull
) - Level Size:
-
Process Level 2:
- Level Size:
2
(nodes7
and1
). - Initialize
previousNode = null
. - Dequeue
7
:- Since
previousNode
isnull
, assignpreviousNode = 7
. - Enqueue left child
9
(no right child for7
).
- Since
- Dequeue
1
:- Connect
7.next = 1
(link the previous node to the current node). - Update
previousNode = 1
. - Enqueue left child
10
. - Enqueue right child
5
.
- Connect
Queue after processing:
[9, 10, 5]
Next Pointer Connections:7 -> 1 -> null
- Level Size:
-
Process Level 3:
- Level Size:
3
(nodes9, 10, 5
). - Initialize
previousNode = null
. - Dequeue
9
:- Since
previousNode
isnull
, assignpreviousNode = 9
. 9
has no children, so nothing is enqueued.
- Since
- Dequeue
10
:- Connect
9.next = 10
(link the previous node to the current node). - Update
previousNode = 10
. 10
has no children, so nothing is enqueued.
- Connect
- Dequeue
5
:- Connect
10.next = 5
(link the previous node to the current node). - Update
previousNode = 5
. 5
has no children, so nothing is enqueued.
- Connect
Queue after processing:
[]
(No more nodes to process).
Next Pointer Connections:9 -> 10 -> 5 -> null
- Level Size:
Final Connected Tree
12 -> null
/ \
7 -> 1 -> null
/ / \
9 -> 10 -> 5 -> null
Code
Here is the code for this algorithm:
Complexity Analysis
Time Complexity
The time complexity of the above algorithm is O(N), where āNā is the total number of nodes in the tree. This is due to the fact that we traverse each node once.
Space Complexity
The space complexity of the above algorithm will be O(N), which is required for the queue. Since we can have a maximum of N/2 nodes at any level (this could happen only at the lowest level), therefore we will need O(N) space to store them in the queue.
.....
.....
.....
Table of Contents
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible