Populating Next Right Pointers in Each Node
Master this topic with zero to advance depth.
Populating Next Right Pointers in Each Node
Connect levels.
Level I: BFS (Level Order)
Intuition
Standard level-order traversal (BFS) using a queue allows us to process nodes level by level. At each level, we iterate through the nodes and set the next pointer of the current node to the next node in the queue (if it's not the last node of the level).
Thought Process
- Standard BFS with Queue.
- At each level
i(of sizeS): - For
jfrom 0 toS-1:node.next = queue.peek()(ifj < S-1).
Detailed Dry Run
| Level | Node | Queue After Pop | Next Pointer |
|---|---|---|---|
| 1 | 2 | [3] | 3 |
| 1 | 3 | [] | null |
| 2 | 4 | [5, 6, 7] | 5 |
Level II: Recursive DFS
Intuition
We can use the fact that the tree is a perfect binary tree to recursively connect nodes. For any node, we connect its left child to its right child. Then, if the node has a next element, we connect its right child to the next element's left child.
Logic
- Base case:
if (!root || !root.left) return. root.left.next = root.right.if (root.next) root.right.next = root.next.left.- Recurse left and right.
Detailed Dry Run
root=1: 2.next=3. root=2: 4.next=5, 5.next=6 (if 2.next exists).
Level III: Optimal (Iterative using Pointers)
Intuition
Thought Process
Since the tree is a perfect binary tree, we can use the already connected next pointers from the current level to connect the children of the next level. This avoids the use of a queue, making it space.
Logic
- Start at the leftmost node of the current level (
leftmost). - Iterate through nodes at this level using
cur = cur.next. - Connect
cur.left.next = cur.right. - Connect
cur.right.next = cur.next.left(ifcur.nextexists).
Complexity
- Time:
- Space:
Detailed Dry Run
| Level Head | Current | cur.left.next | cur.right.next | Action |
|---|---|---|---|---|
| 1 | 1 | 2->3 | null | Done with L1 |
| 2 | 2 | 4->5 | 5->6 | Move to cur=3 |
| 2 | 3 | 6->7 | null | Done with L2 |
⚠️ Common Pitfalls & Tips
This space trick only works for Perfect Binary Trees. For general trees, you need a dummy node and a pointer to track the next level's current node.
Found an issue or have a suggestion?
Help us improve! Report bugs or suggest new features on our Telegram group.