# Print leftmost and rightmost nodes of a Binary Tree

• Difficulty Level : Medium
• Last Updated : 30 Jun, 2022

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  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 the last index (i.e node at index n-1) If it is either of them, we print the value of that node.

Implementation:

## 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 Tapeshdua420.`

## 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`

## Python3

 `# Python3 program to print corner``# node at each level of binary tree``from` `collections ``import` `deque` `# A binary tree node has key, pointer to left``# child and a pointer to right child``class` `Node:``    ``def` `__init__(``self``, key):``        ` `        ``self``.key ``=` `key``        ``self``.left ``=` `None``        ``self``.right ``=` `None` `# Function to print corner node at each level``def` `printCorner(root: Node):` `    ``# If the root is null then simply return``    ``if` `root ``=``=` `None``:``        ``return` `    ``# Do level order traversal``    ``# using a single queue``    ``q ``=` `deque()``    ``q.append(root)` `    ``while` `q:` `        ``# n denotes the size of the current``        ``# level in the queue``        ``n ``=` `len``(q)``        ``for` `i ``in` `range``(n):``            ``temp ``=` `q[``0``]``            ``q.popleft()` `            ``# If it is leftmost corner value or``            ``# rightmost corner value then print it``            ``if` `i ``=``=` `0` `or` `i ``=``=` `n ``-` `1``:``                ``print``(temp.key, end ``=` `" "``)` `            ``# push the left and right children``            ``# of the temp node``            ``if` `temp.left:``                ``q.append(temp.left)``            ``if` `temp.right:``                ``q.append(temp.right)` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``root ``=` `Node(``15``)``    ``root.left ``=` `Node(``10``)``    ``root.right ``=` `Node(``20``)``    ``root.left.left ``=` `Node(``8``)``    ``root.left.right ``=` `Node(``12``)``    ``root.right.left ``=` `Node(``16``)``    ``root.right.right ``=` `Node(``25``)``    ` `    ``printCorner(root)` `# This code is contributed by sanjeev2552`

## 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.