Get Level of a node in a Binary Tree - GeeksforGeeks

02 May, 2022
Given a Binary Tree and a key, write a function that returns level of the key. 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. 
The idea is to start from the root and level as 1. If the key matches with root’s data, return level. Else recursively call for left and right subtrees with level as level + 1. 
C++
C
Java
Python3
C#
Javascript
// C++ program to Get Level of a node in a Binary Tree#include <bits/stdc++.h>using namespace std; /* A tree node structure */struct node {    int data;    struct node* left;    struct node* right;};// Helper function for getLevel(). It returns level of the// data if data is present in tree, otherwise returns 0.int getLevelUtil(struct node* node, int data, int level){    if (node == NULL)        return 0;     if (node->data == data)        return level;     int downlevel = getLevelUtil(node->left, data, level + 1);    if (downlevel != 0)        return downlevel;     downlevel = getLevelUtil(node->right, data, level + 1);    return downlevel;} /* Returns level of given data value */int getLevel(struct node* node, int data){    return getLevelUtil(node, data, 1);} // Utility function to create a new Binary Tree nodestruct node* newNode(int data){    struct node* temp = new struct node;    temp->data = data;    temp->left = NULL;    temp->right = NULL;    return temp;} // Driver Codeint main(){    struct node* root = new struct node;    int x;     // 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);     for (x = 1; x <= 5; x++) {        int level = getLevel(root, x);        if (level)            cout << "Level of " << x << " is "                 << getLevel(root, x) << endl;        else            cout << x << "is not present in tree" << endl;    }     getchar();    return 0;} // This code is contributed by Aditya Kumar (adityakumar129)
// C program to Get Level of a node in a Binary Tree#include <stdio.h>#include <stdlib.h> /* A tree node structure */typedef struct node {    int data;    struct node* left;    struct node* right;} node; // Helper function for getLevel(). It returns level of the// data if data is present in tree, otherwise returns 0.int getLevelUtil(node* node, int data, int level){    if (node == NULL)        return 0;     if (node->data == data)        return level;     int downlevel = getLevelUtil(node->left, data, level + 1);    if (downlevel != 0)        return downlevel;     downlevel = getLevelUtil(node->right, data, level + 1);    return downlevel;} /* Returns level of given data value */int getLevel(node* node, int data){    return getLevelUtil(node, data, 1);} // Utility function to create a new Binary Tree nodenode* newNode(int data){    node* temp = (node*)malloc(sizeof(node));    temp->data = data;    temp->left = NULL;    temp->right = NULL;    return temp;} /* Driver code */int main(){    node* root;    int x;     // 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);     for (x = 1; x <= 5; x++) {        int level = getLevel(root, x);        if (level)            printf(" Level of %d is %d\n", x,                   getLevel(root, x));        else            printf(" %d is not present in tree \n", x);    }     getchar();    return 0;}
// Java program to Get Level of a node in a Binary Tree/* A tree node structure */class Node {    int data;    Node left, right;     public Node(int d)    {        data = d;        left = right = null;    }} class BinaryTree {     Node root;     // Helper function for getLevel(). It returns level of    // the data if data is present in tree, otherwise    // returns 0.    int getLevelUtil(Node node, int data, int level)    {        if (node == null)            return 0;         if (node.data == data)            return level;         int downlevel            = getLevelUtil(node.left, data, level + 1);        if (downlevel != 0)            return downlevel;         downlevel            = getLevelUtil(node.right, data, level + 1);        return downlevel;    }     /* Returns level of given data value */    int getLevel(Node node, int data)    {        return getLevelUtil(node, data, 1);    }     /* Driver code */    public static void main(String[] args)    {        BinaryTree tree = new BinaryTree();         /* Constructing tree given in the above figure */        tree.root = new Node(3);        tree.root.left = new Node(2);        tree.root.right = new Node(5);        tree.root.left.left = new Node(1);        tree.root.left.right = new Node(4);        for (int x = 1; x <= 5; x++) {            int level = tree.getLevel(tree.root, x);            if (level != 0)                System.out.println( "Level of " + x + " is "                    + tree.getLevel(tree.root, x));            else                System.out.println( x + " is not present in tree");        }    }} // This code is contributed by Aditya Kumar (adityakumar129)
# Python3 program to Get Level of a# node in a Binary Tree # Helper function that allocates a# new node with the given data and# None left and right pairs.  class newNode:     # Constructor to create a new node    def __init__(self, data):        self.data = data        self.left = None        self.right = None # Helper function for getLevel(). It# returns level of the data if data is# present in tree, otherwise returns 0  def getLevelUtil(node, data, level):    if (node == None):        return 0     if (node.data == data):        return level     downlevel = getLevelUtil(node.left,                             data, level + 1)    if (downlevel != 0):        return downlevel     downlevel = getLevelUtil(node.right,                             data, level + 1)    return downlevel # Returns level of given data value  def getLevel(node, data):     return getLevelUtil(node, data, 1)  # Driver Codeif __name__ == '__main__':     # Let us construct the Tree shown    # 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)    for x in range(1, 6):        level = getLevel(root, x)        if (level):            print("Level of", x,                  "is", getLevel(root, x))        else:            print(x, "is not present in tree") # This code is contributed by# Shubham Singh(SHUBHAMSINGH10)
// C# program to Get Level of a node in a Binary Treeusing System; /* A tree node structure */public class Node {    public int data;    public Node left, right;     public Node(int d)    {        data = d;        left = right = null;    }} public class BinaryTree {     public Node root;     /* Helper function for getLevel().       It returns level of       the data if data is present in tree,      otherwise returns    0.*/    public virtual int getLevelUtil(Node node, int data,                                    int level)    {        if (node == null)        {            return 0;        }         if (node.data == data)        {            return level;        }         int downlevel            = getLevelUtil(node.left, data, level + 1);        if (downlevel != 0)        {            return downlevel;        }         downlevel            = getLevelUtil(node.right, data, level + 1);        return downlevel;    }     /* Returns level of given data value */    public virtual int getLevel(Node node, int data)    {        return getLevelUtil(node, data, 1);    }     /* Driver code */    public static void Main(string[] args)    {        BinaryTree tree = new BinaryTree();         /* Constructing tree given in the above figure */        tree.root = new Node(3);        tree.root.left = new Node(2);        tree.root.right = new Node(5);        tree.root.left.left = new Node(1);        tree.root.left.right = new Node(4);        for (int x = 1; x <= 5; x++)        {            int level = tree.getLevel(tree.root, x);            if (level != 0)            {                Console.WriteLine(                    "Level of " + x + " is "                    + tree.getLevel(tree.root, x));            }            else            {                Console.WriteLine(                    x + " is not present in tree");            }        }    }} // This code is contributed by Shrikant13
<script>     // Javascript program to Get Level of    // a node in a Binary Tree    /* A tree node structure */         class Node    {        constructor(d) {              this.data = d;            this.left = null;            this.right = null;        }    }         let root;      /* Helper function for getLevel().       It returns level of       the data if data is present in tree,       otherwise returns       0.*/    function getLevelUtil(node, data, level)    {        if (node == null)            return 0;          if (node.data == data)            return level;          let downlevel            = getLevelUtil(node.left, data, level + 1);        if (downlevel != 0)            return downlevel;          downlevel            = getLevelUtil(node.right, data, level + 1);        return downlevel;    }      /* Returns level of given data value */    function getLevel(node, data)    {        return getLevelUtil(node, data, 1);    }         /* 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);    for (let x = 1; x <= 5; x++)    {      let level = getLevel(root, x);      if (level != 0)        document.write(          "Level of " + x + " is "          + getLevel(root, x) + "</br>");      else        document.write(          x + " is not present in tree");    }     </script>
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
Time Complexity of getLevel() is O(n) where n is the number of nodes in the given Binary Tree.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Alternative Approach: The given problem can be solved with the help of level order traversal of given binary tree.
C++
Java
// C++ program to print level in which X is present in// binary tree using STL#include <bits/stdc++.h>using namespace std; // A Binary Tree Nodestruct Node {    int data;    struct Node *left, *right;}; int printLevel(Node* root, int X){    Node* node;    // Base Case    if (root == NULL)        return 0;    // Create an empty queue for level order traversal    queue<Node*> q;    // Create a var represent current level of tree    int currLevel = 1;    // Enqueue Root    q.push(root);    while (q.empty() == false) {        int size = q.size();        while (size--) {            node = q.front();            if (node->data == X)                return currLevel;            q.pop();            /* Enqueue left child */            if (node->left != NULL)                q.push(node->left);            /*Enqueue right child */            if (node->right != NULL)                q.push(node->right);        }        currLevel++;    }    return 0;} // Utility function to create a new tree nodeNode* newNode(int data){    Node* temp = new Node;    temp->data = data;    temp->left = temp->right = NULL;    return temp;} // Driver program to test above functionsint main(){    // Let us create binary tree shown in above diagram    Node* root = newNode(1);    root->left = newNode(2);    root->right = newNode(3);    root->left->left = newNode(4);    root->left->right = newNode(5);    root->right->left = newNode(7);    root->right->right = newNode(6);     cout << printLevel(root, 6);    return 0;} // This code is contributed by Aditya Kumar (adityakumar129)
// Java program to print level in which X is present in// binary treeimport java.util.LinkedList;import java.util.Queue; /* Class to represent Tree node */class Node {  int data;  Node left, right;   public Node(int item)  {    data = item;    left = null;    right = null;  }} /* Class to print Level Order Traversal */class BinaryTree {   Node root;   // Given a binary tree. Print its nodes in level order  // using array for implementing queue.  // Create a var represent current level of tree  public static int currLevel = 1;  int printLevelOrder(int X)  {    // Create an empty queue for level order traversal    Queue<Node> queue = new LinkedList<Node>();    queue.add(root);     while (!queue.isEmpty()) {       // poll() removes the present head. For more      // information on poll() visit      // https://www.geeksforgeeks.org/queue-poll-method-in-java/      int size = queue.size();      for (int i = 0; i < size; i++) {        Node tempNode = queue.poll();        if (tempNode.data == X)          return currLevel;        /*Enqueue left child */        if (tempNode.left != null)          queue.add(tempNode.left);        /*Enqueue right child */        if (tempNode.right != null)          queue.add(tempNode.right);      }      currLevel++;    }    return currLevel;  }   public static void main(String args[])  {    /* creating a binary tree and entering        the nodes */    BinaryTree tree_level = new BinaryTree();    tree_level.root = new Node(1);    tree_level.root.left = new Node(2);    tree_level.root.right = new Node(3);    tree_level.root.left.left = new Node(4);    tree_level.root.left.right = new Node(5);    tree_level.root.right.left = new Node(7);    tree_level.root.right.right = new Node(6);    System.out.println(      "Level order traversal of binary tree is - "      + tree_level.printLevelOrder(6));  }} // This code is contributed by Aditya Kumar (adityakumar129)
3
Time Complexity: O(n) where n is the number of nodes in the binary tree  
Auxiliary Space: O(n) where n is the number of nodes in the binary tree 
shrikanth13
SHUBHAMSINGH10
Akanksha_Rai
ipsita2811
decode2207
nobita04
simmytarika5
simranarora5sos
adityakumar129
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)
Inorder Tree Traversal without Recursion
Binary Tree | Set 2 (Properties)
Decision Tree
Construct Tree from given Inorder and Preorder traversals
Introduction to Tree Data Structure
Lowest Common Ancestor in a Binary Tree | Set 1
Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
Expression Tree
Deletion in a Binary Tree