Print Levels of all nodes in a Binary Tree - GeeksforGeeks

14 Mar, 2022
Given a Binary Tree and a key, write a function that prints levels of all keys in given binary tree.For example, consider the following tree. If the input key is 3, then your function should return 1. If the input key is 4, then your function should return 3. And for key which is not present in key, then your function should return 0. 
 
Input:
       3
      / \
     2   5
    / \
   1   4

output:
 Level of 1 is 3
 Level of 2 is 2
 Level of 3 is 1
 Level of 4 is 3
 Level of 5 is 2
 
We have discussed an recursive solution in below post. Get Level of a node in a Binary TreeIn this post, an iterative solution based on Level order traversal is discussed. We store level of every node in queue together with the node while doing the traversal.  
C++
Java
Python3
C#
Javascript
// An iterative C++ program to print levels// of all nodes#include <bits/stdc++.h>using namespace std; /* A tree node structure */struct Node {    int data;    struct Node* left;    struct Node* right;}; void printLevel(struct Node* root){    if (!root)        return;     // queue to hold tree node with level    queue<pair<struct Node*, int> > q;     q.push({root, 1}); // let root node be at level 1     pair<struct Node*, int> p;     // Do level Order Traversal of tree    while (!q.empty()) {        p = q.front();        q.pop();         cout << "Level of " << p.first->data             << " is " << p.second << "\n";         if (p.first->left)            q.push({ p.first->left, p.second + 1 });        if (p.first->right)            q.push({ p.first->right, p.second + 1 });    }} /* Utility function to create a new Binary Tree node */struct Node* newNode(int data){    struct Node* temp = new struct Node;    temp->data = data;    temp->left = temp->right = NULL;    return temp;} /* Driver function to test above functions */int main(){    struct Node* root = NULL;     /* Constructing tree given in the above figure */    root = newNode(3);    root->left = newNode(2);    root->right = newNode(5);    root->left->left = newNode(1);    root->left->right = newNode(4);     printLevel(root);    return 0;}
// Java program to print// levels of all nodesimport java.util.LinkedList;import java.util.Queue;public class Print_Level_Btree {         /* A tree node structure */    static class Node {        int data;        Node left;        Node right;        Node(int data){            this.data = data;            left = null;            right = null;        }    }         // User defined class Pair to hold    // the node and its level    static class Pair{        Node n;        int i;        Pair(Node n, int i){            this.n = n;            this.i = i;        }             }         // function to print the nodes and    // its corresponding level    static void printLevel(Node root)    {        if (root == null)            return;              // queue to hold tree node with level        Queue<Pair> q = new LinkedList<Pair>();              // let root node be at level 1        q.add(new Pair(root, 1));              Pair p;              // Do level Order Traversal of tree        while (!q.isEmpty()) {            p = q.peek();            q.remove();                  System.out.println("Level of " + p.n.data +                    " is " + p.i);            if (p.n.left != null)                q.add(new Pair(p.n.left, p.i + 1));            if (p.n.right != null)                q.add(new Pair(p.n.right, p.i + 1));        }    }         /* Driver function to test above        functions */    public static void main(String args[])    {        Node root = null;              /* Constructing tree given in the              above figure */        root = new Node(3);        root.left = new Node(2);        root.right = new Node(5);        root.left.left = new Node(1);        root.left.right = new Node(4);              printLevel(root);    }}// This code is contributed by Sumit Ghosh
# Python3 program to print levels# of all nodes # Helper function that allocates a new# node with the given data and None# left and right pointers.                                    class newNode:     # Construct to create a new node    def __init__(self, key):        self.data = key        self.left = None        self.right = None def printLevel( root):     if (not root):        return     # queue to hold tree node with level    q = []     # let root node be at level 1    q.append([root, 1])     p = []     # Do level Order Traversal of tree    while (len(q)):        p = q[0]        q.pop(0)        print("Level of", p[0].data, "is", p[1])        if (p[0].left):            q.append([p[0].left, p[1] + 1])        if (p[0].right):            q.append([p[0].right, p[1] + 1 ]) # Driver Codeif __name__ == '__main__':         """    Let us create Binary Tree shown    in above example """    root = newNode(3)    root.left = newNode(2)    root.right = newNode(5)    root.left.left = newNode(1)    root.left.right = newNode(4)    printLevel(root) # This code is contributed by# Shubham Singh(SHUBHAMSINGH10)
using System;using System.Collections.Generic; // C# program to print // levels of all nodespublic class Print_Level_Btree{     /* A tree node structure */    public class Node    {        public int data;        public Node left;        public Node right;        public Node(int data)        {            this.data = data;            left = null;            right = null;        }    }     // User defined class Pair to hold     // the node and its level    public class Pair    {        public Node n;        public int i;        public Pair(Node n, int i)        {            this.n = n;            this.i = i;        }     }     // function to print the nodes and     // its corresponding level    public static void printLevel(Node root)    {        if (root == null)        {            return;        }         // queue to hold tree node with level        LinkedList<Pair> q = new LinkedList<Pair>();         // let root node be at level 1        q.AddLast(new Pair(root, 1));         Pair p;         // Do level Order Traversal of tree        while (q.Count > 0)        {            p = q.First.Value;            q.RemoveFirst();             Console.WriteLine("Level of " + p.n.data + " is " + p.i);            if (p.n.left != null)            {                q.AddLast(new Pair(p.n.left, p.i + 1));            }            if (p.n.right != null)            {                q.AddLast(new Pair(p.n.right, p.i + 1));            }        }    }     /* Driver function to test above        functions */    public static void Main(string[] args)    {        Node root = null;         /* Constructing tree given in the               above figure */        root = new Node(3);        root.left = new Node(2);        root.right = new Node(5);        root.left.left = new Node(1);        root.left.right = new Node(4);         printLevel(root);    }}   // This code is contributed by Shrikant13
<script>    // Javascript program to print    // levels of all nodes         class Node    {        constructor(data) {           this.left = null;           this.right = null;           this.data = data;        }    }     // function to print the nodes and    // its corresponding level    function printLevel(root)    {        if (root == null)            return;                // queue to hold tree node with level        let q = [];                // let root node be at level 1        q.push([root, 1]);                let p;                // Do level Order Traversal of tree        while (q.length > 0) {            p = q[0];            q.shift();                    document.write("Level of " + p[0].data +                    " is " + p[1] + "</br>");            if (p[0].left != null)                q.push([p[0].left, p[1] + 1]);            if (p[0].right != null)                q.push([p[0].right, p[1] + 1]);        }    }         let root = null;            /* Constructing tree given in the                above figure */    root = new Node(3);    root.left = new Node(2);    root.right = new Node(5);    root.left.left = new Node(1);    root.left.right = new Node(4);     printLevel(root);         // This code is contributed by suresh07.</script>
Output :  
Level of 3 is 1
Level of 2 is 2
Level of 5 is 2
Level of 1 is 3
Level of 4 is 3
Time Complexity: O(n) where n is the number of nodes in the given Binary Tree. 
YouTubeGeeksforGeeks508K subscribersPrint Levels of all nodes in a Binary Tree | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 3:56•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=yXbkd0MJZfw" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Abhishek Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
shrikanth13
SHUBHAMSINGH10
Akanksha_Rai
suresh07
simmytarika5
surinderdawra388
tree-level-order
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Binary Tree | Set 3 (Types of Binary Tree)
Binary Tree | Set 2 (Properties)
Decision Tree
Introduction to Tree Data Structure
Lowest Common Ancestor in a Binary Tree | Set 1
BFS vs DFS for Binary Tree
Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
Expression Tree
Deletion in a Binary Tree
Segment Tree | Set 1 (Sum of given range)