# Print leftmost and rightmost nodes of a Binary Tree

Given a Binary Tree, Print the corner nodes at each level. The node at the leftmost and the node at the rightmost.

For example, output for following is 15, 10, 20, 8, 25. ## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

A Simple Solution is to do two traversals using the approaches discussed for printing left view and right view.

Can we print all corner nodes using one traversal?
The idea is to use Level Order Traversal. Every time we store the size of the queue in a variable n, which is the number of nodes at that level. For every level we check whether the current node is the first (i.e node at index 0) and the node at last index (i.e node at index n-1) , If it is either of them , we print the value of that node .

## C++

 `// C/C++ program to print corner node at each level ` `// of binary tree ` `#include ` `using` `namespace` `std; ` ` `  `/* A binary tree node has key, pointer to left ` `   ``child and a pointer to right child */` `struct` `Node ` `{ ` `    ``int` `key; ` `    ``struct` `Node* left, *right; ` `}; ` ` `  `/* To create a newNode of tree and return pointer */` `struct` `Node* newNode(``int` `key) ` `{ ` `    ``Node* temp = ``new` `Node; ` `    ``temp->key = key; ` `    ``temp->left = temp->right = NULL; ` `    ``return` `(temp); ` `} ` ` `  `/* Function to print corner node at each level */` `void` `printCorner(Node *root) ` `{ ` `    ``//If the root is null then simply return ` `    ``if``(root == NULL) ` `        ``return``; ` `    ``//Do level order traversal using a single queue ` `    ``queue q; ` `    ``q.push(root); ` `    `  `    ``while``(!q.empty()) ` `    ``{ ` `        ``//n denotes the size of the current level in the queue ` `        ``int` `n = q.size(); ` `         `  `        ``for``(``int` `i =0;ikey<<``" "``; ` ` `  `            ``//push the left and right children of the temp node ` `            ``if``(temp->left) ` `                ``q.push(temp->left); ` `            ``if``(temp->right) ` `                ``q.push(temp->right); ` `        ``} ` `    ``} ` `} ` `// Driver program to test above function ` `int` `main () ` `{ ` `    ``Node *root =  newNode(15); ` `    ``root->left = newNode(10); ` `    ``root->right = newNode(20); ` `    ``root->left->left = newNode(8); ` `    ``root->left->right = newNode(12); ` `    ``root->right->left = newNode(16); ` `    ``root->right->right = newNode(25); ` `    ``printCorner(root); ` `    ``return` `0;  ` `} ` ` `  `// This code is contributed by Utkarsh Choubey `

## Java

 `// Java program to print corner node at each level in a binary tree ` ` `  `import` `java.util.*; ` ` `  `/* A binary tree node has key, pointer to left ` `   ``child and a pointer to right child */` `class` `Node  ` `{ ` `    ``int` `key; ` `    ``Node left, right; ` ` `  `    ``public` `Node(``int` `key)  ` `    ``{ ` `        ``this``.key = key; ` `        ``left = right = ``null``; ` `    ``} ` `} ` ` `  `class` `BinaryTree  ` `{ ` `    ``Node root; ` ` `  `    ``/* Function to print corner node at each level */` `    ``void` `printCorner(Node root) ` `    ``{ ` `        ``//  star node is for keeping track of levels ` `        ``Queue q = ``new` `LinkedList(); ` ` `  `        ``// pushing root node and star node ` `        ``q.add(root); ` `        ``// Do level order traversal of Binary Tree ` `        ``while` `(!q.isEmpty())  ` `        ``{ ` `            ``// n is the no of nodes in current Level ` `            ``int` `n = q.size(); ` `            ``for``(``int` `i = ``0` `; i < n ; i++){ ` `            ``// dequeue the front node from the queue ` `            ``Node temp = q.peek(); ` `            ``q.poll(); ` `            ``//If it is leftmost corner value or rightmost corner value then print it ` `            ``if``(i==``0` `|| i==n-``1``) ` `                ``System.out.print(temp.key + ``"  "``);  ` `            ``//push the left and right children of the temp node ` `            ``if` `(temp.left != ``null``)  ` `                ``q.add(temp.left);  ` `            ``if` `(temp.right != ``null``)  ` `                ``q.add(temp.right);  ` `        ``} ` `        ``} ` ` `  `    ``} ` ` `  `    ``// Driver program to test above functions ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` `        ``BinaryTree tree = ``new` `BinaryTree(); ` `        ``tree.root = ``new` `Node(``15``); ` `        ``tree.root.left = ``new` `Node(``10``); ` `        ``tree.root.right = ``new` `Node(``20``); ` `        ``tree.root.left.left = ``new` `Node(``8``); ` `        ``tree.root.left.right = ``new` `Node(``12``); ` `        ``tree.root.right.left = ``new` `Node(``16``); ` `        ``tree.root.right.right = ``new` `Node(``25``); ` ` `  `        ``tree.printCorner(tree.root); ` `    ``} ` `} ` ` `  `// This code has been contributed by Utkarsh Choubey `

## C#

 `// C# program to print corner node  ` `// at each level in a binary tree ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `/* A binary tree node has key, pointer to left ` `child and a pointer to right child */` `public` `class` `Node  ` `{ ` `    ``public` `int` `key; ` `    ``public` `Node left, right; ` ` `  `    ``public` `Node(``int` `key)  ` `    ``{ ` `        ``this``.key = key; ` `        ``left = right = ``null``; ` `    ``} ` `} ` ` `  `public` `class` `BinaryTree  ` `{ ` `    ``Node root; ` ` `  `    ``/* Function to print corner node at each level */` `    ``void` `printCorner(Node root) ` `    ``{ ` `        ``// star node is for keeping track of levels ` `        ``Queue q = ``new` `Queue(); ` ` `  `        ``// pushing root node and star node ` `        ``q.Enqueue(root); ` `        ``// Do level order traversal of Binary Tree ` `        ``while` `(q.Count != 0)  ` `        ``{ ` `            ``// n is the no of nodes in current Level ` `            ``int` `n = q.Count; ` `            ``for``(``int` `i = 0 ; i < n ; i++){ ` `                ``Node temp = q.Peek(); ` `                ``q.Dequeue(); ` `                ``//If it is leftmost corner value or rightmost corner value then print it ` `                ``if``(i==0||i==n-1) ` `                    ``Console.Write(temp.key + ``" "``);  ` `            ``//push the left and right children of the temp node ` `                ``if` `(temp.left != ``null``)  ` `                    ``q.Enqueue(temp.left);  ` `                ``if` `(temp.right != ``null``)  ` `                    ``q.Enqueue(temp.right);  ` ` `  `            ``} ` `        ``} ` ` `  `}  ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args)  ` `    ``{ ` `        ``BinaryTree tree = ``new` `BinaryTree(); ` `        ``tree.root = ``new` `Node(15); ` `        ``tree.root.left = ``new` `Node(10); ` `        ``tree.root.right = ``new` `Node(20); ` `        ``tree.root.left.left = ``new` `Node(8); ` `        ``tree.root.left.right = ``new` `Node(12); ` `        ``tree.root.right.left = ``new` `Node(16); ` `        ``tree.root.right.right = ``new` `Node(25); ` ` `  `        ``tree.printCorner(tree.root); ` `    ``} ` `} ` ` `  `// This code is contributed by Utkarsh Choubey `

Output :

`15  10  20  8  25  `

Time Complexity : O(n) where n is number of nodes in Binary Tree.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

6

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.