package com.interview.tree; /** * Date 03/24/2016 * @author Tushar Roy * * Populate next pointer for each node of binary tree. * * Time complexity O(n) * Space complexity O(1) * * https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ */ public class ConnectNodesAtSameLevel { public void connect(Node root) { if (root == null) { return; } Node firstNode = root; Node prevNode = null; while (firstNode != null) { root = firstNode; firstNode = null; prevNode = null; while (root != null) { if (root.left != null) { if (firstNode == null) { firstNode = root.left; } if (prevNode != null) { prevNode.next = root.left; } prevNode = root.left; } if (root.right != null) { if (firstNode == null) { firstNode = root.right; } if (prevNode != null) { prevNode.next = root.right; } prevNode = root.right; } root = root.next; } } } public static void main(String args[]){ BinaryTree bt = new BinaryTree(); Node root = null; root = bt.addNode(10, root); root = bt.addNode(15, root); root = bt.addNode(5, root); root = bt.addNode(7, root); root = bt.addNode(19, root); root = bt.addNode(20, root); root = bt.addNode(-1, root); root = bt.addNode(21, root); ConnectNodesAtSameLevel cns = new ConnectNodesAtSameLevel(); cns.connect(root); } }