Populating Next Right Pointers in Each Node LeetCode Solution

Last updated on January 21st, 2025 at 02:22 am

Here, we see a Populating Next Right Pointers in Each Node LeetCode Solution. This Leetcode problem is solved using different approaches in many programming languages, such as C++, Java, JavaScript, Python, etc.

List of all LeetCode Solution

Topics

Array, Hash Table, Two-Pointers

Companies

LinkedIn

Level of Question

Medium

Populating Next Right Pointers in Each Node LeetCode Solution

Populating Next Right Pointers in Each Node LeetCode Solution

1. Problem Statement

You are given a perfect binary tree where all leaves are on the same level, and every parent has two children. The binary tree has the following definition:struct Node { int val; Node *left; Node *right; Node *next; }

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Example 1:

116 sample

Input: root = [1,2,3,4,5,6,7]
Output: [1,#,2,3,#,4,5,6,7,#]
Explanation: Given the above perfect binary tree (Figure A), your function should populate each next pointer to point to its next right node, just like in Figure B. The serialized output is in level order as connected by the next pointers, with ‘#’ signifying the end of each level.

Example 2:Input: root = [] Output: []

2. Coding Pattern Used in Solution

The coding pattern used in the provided code is “Tree Depth First Search (DFS)”. This is because the code traverses the binary tree recursively (in C++, Java, and Python) or level by level (in JavaScript) to connect the next pointers of nodes. The recursive approach in C++, Java, and Python explores the left and right subtrees in a depth-first manner, while the JavaScript implementation uses a queue to perform a level-order traversal, which is a variation of Tree Breadth-First Search (BFS).

3. Code Implementation in Different Languages

3.1 Populating Next Right Pointers in Each Node C++

class Solution {
public:
Node* connect(Node* root) {
    if(root == NULL) return NULL;
    if(root->left != NULL) root->left->next = root->right;
    if(root->right != NULL && root->next != NULL) root->right->next = root->next->left;
    connect(root->left);
    connect(root->right);
    return root;
   }
};

3.2 Populating Next Right Pointers in Each Node Java

class Solution {
    public Node connect(Node root) {
        if(root == null) return null;
        if(root.left != null) root.left.next = root.right;
        if(root.right != null && root.next != null) root.right.next = root.next.left;
        connect(root.left);
        connect(root.right);
        return root;        
    }
}

3.3 Populating Next Right Pointers in Each Node JavaScript

var connect = function(root) {
    if (root == null) return root;
    let queue = [root];
    while(queue.length!=0) {
        let next = [];
        while(queue.length!=0) {
            let node = queue.shift();
            node.next = queue[0]||null;
            if (node.left!=null) {
                next.push(node.left);
                next.push(node.right);
            }
        }
        queue = next;
    }
    return root;    
};

3.4 Populating Next Right Pointers in Each Node Python

class Solution(object):
    def connect(self, root):
        if not root:
            return
        c1, c2 = root.left, root.right
        while c1 and c2:
            c1.next = c2
            c1, c2 = c1.right, c2.left
        self.connect(root.left)
        self.connect(root.right)
        return root

4. Time and Space Complexity

Time ComplexitySpace Complexity
C++O(n)O(h)
JavaO(n)O(h)
JavaScriptO(n)O(n)
PythonO(n)O(h)
Scroll to Top