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++ 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 node */struct node* newNode(int data) { struct node *temp = new struct node; temp -> data = data; temp -> left = NULL; temp -> right = NULL; return temp; } // Driver Code int 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 Akanksha Rai |
C
#include<stdio.h> // C program to Get Level of a node in a Binary Tree /* 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 node */struct node* newNode(int data) { struct node *temp = new struct node; temp->data = data; temp->left = NULL; temp->right = NULL; return temp; } /* Driver function to test above functions */int 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) 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
// 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 function to test above functions */ 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 has been contributed by Mayank Jaiswal(mayank_24) |
Python3
# 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 Code if __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#
// C# program to Get Level of a node in a Binary Tree using 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 function to test above functions */ 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 |
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
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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Recommended Posts:
- Count nodes from all lower levels smaller than minimum valued node of current level for every level in a Binary Tree
- Get level of a node in binary tree | iterative approach
- Difference between sums of odd level and even level nodes of a Binary Tree
- Print nodes of a Binary Search Tree in Top Level Order and Reversed Bottom Level Order alternately
- Difference between sums of odd level and even level nodes in an N-ary Tree
- Depth of the deepest odd level node in Binary Tree
- Find the maximum node at a given level in a binary tree
- Level Order Predecessor of a node in Binary Tree
- Level Order Successor of a node in Binary Tree
- Print all the nodes except the leftmost node in every level of the given binary tree
- Print all nodes except rightmost node of every level of the Binary Tree
- Deletion of a given node K in a Binary Tree using Level Order Traversal
- Given level order traversal of a Binary Tree, check if the Tree is a Min-Heap
- Check if max sum level of Binary tree divides tree into two equal sum halves
- Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
- Get maximum left node in binary tree
- Get last node of the binary tree following given pattern starting from X
- Connect Nodes at same Level (Level Order Traversal)
- General Tree (Each node can have arbitrary number of children) Level Order Traversal
- Print nodes between two given level numbers of a binary tree


