# Connect all nodes to their Left Neighbors in a Binary Tree

Given a Binary Tree, where each node contains an extra empty pointer initially null. The task is to connect all nodes of the binary tree to their left neighbour at the same level using this extra pointer.

**Examples:**

Input :A / \ B C / \ \ D E FOutput :NULL<--A / \ NULL<--B<--C / \ \ NULL<--D<--E<--F

**Approach:**

We can use Pre-order traversal of tree passing the level of the node at each call. The root node is at level 0. While traversing we store the recently seen node at that level in an array of node pointers. The pre-order traversal ensures that the node in the array at a particular level is left neighbour of upcoming node at the same level.

Below is the implementation of the above approach:

`// CPP program to connect nodes ` `// at same level using extended ` `// pre-order traversal ` ` ` `#include <bits/stdc++.h> ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Binary tree node, with extra pointer leftNeighbour ` `// to store the neighbour to left nodes ` `class` `node { ` `public` `: ` ` ` `int` `data; ` ` ` `node* left; ` ` ` `node* right; ` ` ` `node* leftNeighbour; ` ` ` ` ` `/* Constructor that allocates a new node with the ` ` ` `given data and NULL left and right pointers. */` ` ` `node(` `int` `data) ` ` ` `{ ` ` ` `this` `->data = data; ` ` ` `this` `->left = NULL; ` ` ` `this` `->right = NULL; ` ` ` `this` `->leftNeighbour = NULL; ` ` ` `} ` `}; ` ` ` `// Array to store the recent visited ` `// node at particulat level represented ` `// by indices ` `node* a[100]; ` ` ` `// Function to connect nodes using preorder ` `// traversal ` `void` `connectNodes(node* p, ` `int` `l) ` `{ ` ` ` `if` `(p == NULL) ` ` ` `return` `; ` ` ` ` ` `// assigning left neighbor ` ` ` `p->leftNeighbour = a[l]; ` ` ` ` ` `// updating value of the recent ` ` ` `// node at level ` ` ` `a[l] = p; ` ` ` `connectNodes(p->left, l + 1); ` ` ` `connectNodes(p->right, l + 1); ` `} ` ` ` `// Utility function to connect nodes to neighbours ` `// using preorder traversal ` `void` `connectNodesUtil(node* root) ` `{ ` ` ` `// Initalize nodes at every level to NULL ` ` ` `for` `(` `int` `i = 0; i < 100; i++) ` ` ` `a[i] = NULL; ` ` ` ` ` `// Populates next left pointer in all nodes ` ` ` `connectNodes(root, 0); ` ` ` ` ` `// Let us check the values of next left pointers ` ` ` `cout << ` `"Following are populated leftNeighbour"` ` ` `<<` `" pointers in the tree:\n"` `; ` ` ` ` ` `cout << ` `"leftNeighbour of "` `<< root->data << ` `" is "` ` ` `<< (root->leftNeighbour ? ` ` ` `root->leftNeighbour->data : -1) << endl; ` ` ` ` ` `cout << ` `"leftNeighbour of "` `<< root->left->data << ` `" is "` ` ` `<< (root->left->leftNeighbour ? ` ` ` `root->left->leftNeighbour->data : -1) << endl; ` ` ` ` ` `cout << ` `"leftNeighbour of "` `<< root->right->data << ` `" is "` ` ` `<< (root->right->leftNeighbour ? ` ` ` `root->right->leftNeighbour->data : -1) << endl; ` ` ` ` ` `cout << ` `"leftNeighbour of "` `<< root->left->left->data << ` `" is "` ` ` `<< (root->left->left->leftNeighbour ? ` ` ` `root->left->left->leftNeighbour->data : -1) << endl; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` ` ` `/* Constructed binary tree is ` ` ` `10 ` ` ` `/ \ ` ` ` `8 2 ` ` ` `/ ` ` ` `3 ` ` ` `*/` ` ` `node* root = ` `new` `node(10); ` ` ` `root->left = ` `new` `node(8); ` ` ` `root->right = ` `new` `node(2); ` ` ` `root->left->left = ` `new` `node(3); ` ` ` ` ` `connectNodesUtil(root); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

Following are populated leftNeighbour pointers in the tree: leftNeighbour of 10 is -1 leftNeighbour of 8 is -1 leftNeighbour of 2 is 8 leftNeighbour of 3 is -1

## Recommended Posts:

- Print all leaf nodes of a binary tree from right to left
- Print all leaf nodes of a Binary Tree from left to right
- Print leaf nodes in binary tree from left to right using one stack
- Change a Binary Tree so that every node stores sum of all nodes in left subtree
- Print All Leaf Nodes of a Binary Tree from left to right | Set-2 ( Iterative Approach )
- Find sum of all left leaves in a given Binary Tree
- Convert left-right representation of a binary tree to down-right
- Print Left View of a Binary Tree
- Get maximum left node in binary tree
- Deepest left leaf node in a binary tree
- Iterative Method To Print Left View of a Binary Tree
- Deepest left leaf node in a binary tree | iterative approach
- Connect nodes at same level
- Sum of all nodes in a binary tree
- Sum of all the Boundary Nodes of a Binary Tree

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.