Print the nodes of the Binary Tree whose height is a Prime number

Given a binary tree, our task is to print the nodes whose height is a prime number starting from the root node.
Examples:
Input:
1
/ \
2 3
/ \
4 5
Output: 4 5
Explanation:
For this tree:
Height of Node 1 - 0,
Height of Node 2 - 1,
Height of Node 3 - 1,
Height of Node 4 - 2,
Height of Node 5 - 2.
Hence, the nodes whose height
is a prime number are 4, and 5.
Input:
1
/ \
2 5
/ \
3 4
Output: 3 4
Explanation:
For this tree:
Height of Node 1 - 0,
Height of Node 2 - 1,
Height of Node 3 - 2,
Height of Node 4 - 2,
Height of Node 5 - 1.
Hence, the nodes whose height
is a prime number are 3, and 4.
Approach: To solve the problem mentioned above,
- We have to perform Depth First Search(DFS) on the tree and for every node, store the height of every node as we move down the tree.
- Iterate over the height array of each node and check if it prime or not.
- If yes then print the node else ignore it.
Below is the implementation of the above approach:
C++
// C++ implementation of nodes// at prime height in the given tree#include <bits/stdc++.h>using namespace std;#define MAX 100000vector<int> graph[MAX + 1];// To store Prime Numbersvector<bool> Prime(MAX + 1, true);// To store height of each nodeint height[MAX + 1];// Function to find the// prime numbers till 10^5void SieveOfEratosthenes(){ int i, j; Prime[0] = Prime[1] = false; for (i = 2; i * i <= MAX; i++) { // Traverse all multiple of i // and make it false if (Prime[i]) { for (j = 2 * i; j < MAX; j += i) { Prime[j] = false; } } }}// Function to perform dfsvoid dfs(int node, int parent, int h){ // Store the height of node height[node] = h; for (int to : graph[node]) { if (to == parent) continue; dfs(to, node, h + 1); }}// Function to find the nodes// at prime heightvoid primeHeightNode(int N){ // To precompute prime number till 10^5 SieveOfEratosthenes(); for (int i = 1; i <= N; i++) { // Check if height[node] is prime if (Prime[height[i]]) { cout << i << " "; } }}// Driver codeint main(){ // Number of nodes int N = 5; // Edges of the tree graph[1].push_back(2); graph[1].push_back(3); graph[2].push_back(4); graph[2].push_back(5); dfs(1, 1, 0); primeHeightNode(N); return 0;} |
Java
// Java implementation of nodes// at prime height in the given treeimport java.util.*;class GFG{ static final int MAX = 100000; @SuppressWarnings("unchecked")static Vector<Integer> []graph = new Vector[MAX + 1]; // To store Prime Numbersstatic boolean []Prime = new boolean[MAX + 1]; // To store height of each nodestatic int []height = new int[MAX + 1]; // Function to find the// prime numbers till 10^5static void SieveOfEratosthenes(){ int i, j; Prime[0] = Prime[1] = false; for(i = 2; i * i <= MAX; i++) { // Traverse all multiple of i // and make it false if (Prime[i]) { for(j = 2 * i; j < MAX; j += i) { Prime[j] = false; } } }} // Function to perform dfsstatic void dfs(int node, int parent, int h){ // Store the height of node height[node] = h; for(int to : graph[node]) { if (to == parent) continue; dfs(to, node, h + 1); }} // Function to find the nodes// at prime heightstatic void primeHeightNode(int N){ // To precompute prime number till 10^5 SieveOfEratosthenes(); for(int i = 1; i <= N; i++) { // Check if height[node] is prime if (Prime[height[i]]) { System.out.print(i + " "); } }} // Driver codepublic static void main(String[] args){ // Number of nodes int N = 5; for(int i = 0; i < Prime.length; i++) Prime[i] = true; for(int i = 0; i < graph.length; i++) graph[i] = new Vector<Integer>(); // Edges of the tree graph[1].add(2); graph[1].add(3); graph[2].add(4); graph[2].add(5); dfs(1, 1, 0); primeHeightNode(N);}}// This code is contributed by 29AjayKumar |
Python3
# Python3 implementation of nodes# at prime height in the given treeMAX = 100000graph = [[] for i in range(MAX + 1)]# To store Prime NumbersPrime = [True for i in range(MAX + 1)]# To store height of each nodeheight = [0 for i in range(MAX + 1)]# Function to find the# prime numbers till 10^5def SieveOfEratosthenes(): Prime[0] = Prime[1] = False i = 2 while i * i <= MAX: # Traverse all multiple of i # and make it false if (Prime[i]): for j in range(2 * i, MAX, i): Prime[j] = False i += 1# Function to perform dfsdef dfs(node, parent, h): # Store the height of node height[node] = h for to in graph[node]: if (to == parent): continue dfs(to, node, h + 1) # Function to find the nodes# at prime heightdef primeHeightNode(N): # To precompute prime # number till 10^5 SieveOfEratosthenes() for i in range(1, N + 1): # Check if height[node] is prime if (Prime[height[i]]): print(i, end = ' ')# Driver codeif __name__=="__main__": # Number of nodes N = 5 # Edges of the tree graph[1].append(2) graph[1].append(3) graph[2].append(4) graph[2].append(5) dfs(1, 1, 0) primeHeightNode(N)# This code is contributed by rutvik_56 |
C#
// C# implementation of nodes// at prime height in the given treeusing System;using System.Collections.Generic;class GFG{ static readonly int MAX = 100000; static List<int>[] graph = new List<int>[ MAX + 1 ]; // To store Prime Numbers static bool[] Prime = new bool[MAX + 1]; // To store height of each node static int[] height = new int[MAX + 1]; // Function to find the // prime numbers till 10^5 static void SieveOfEratosthenes() { int i, j; Prime[0] = Prime[1] = false; for (i = 2; i * i <= MAX; i++) { // Traverse all multiple of i // and make it false if (Prime[i]) { for (j = 2 * i; j < MAX; j += i) { Prime[j] = false; } } } } // Function to perform dfs static void dfs(int node, int parent, int h) { // Store the height of node height[node] = h; foreach(int to in graph[node]) { if (to == parent) continue; dfs(to, node, h + 1); } } // Function to find the nodes // at prime height static void primeHeightNode(int N) { // To precompute prime number till 10^5 SieveOfEratosthenes(); for (int i = 1; i <= N; i++) { // Check if height[node] is prime if (Prime[height[i]]) { Console.Write(i + " "); } } } // Driver code public static void Main(String[] args) { // Number of nodes int N = 5; for (int i = 0; i < Prime.Length; i++) Prime[i] = true; for (int i = 0; i < graph.Length; i++) graph[i] = new List<int>(); // Edges of the tree graph[1].Add(2); graph[1].Add(3); graph[2].Add(4); graph[2].Add(5); dfs(1, 1, 0); primeHeightNode(N); }}// This code is contributed by Amit Katiyar |
Javascript
<script>// Javascript implementation of nodes// at prime height in the given treelet MAX = 100000;let graph = []for(let i = 0; i < MAX + 1; i++){ graph.push([])}// To store Prime Numberslet Prime = new Array(MAX + 1).fill(true);// To store height of each nodelet height = new Array(MAX + 1);// Function to find the// prime numbers till 10^5function SieveOfEratosthenes(){ let i, j; Prime[0] = Prime[1] = false; for (i = 2; i * i <= MAX; i++) { // Traverse all multiple of i // and make it false if (Prime[i]) { for (j = 2 * i; j < MAX; j += i) { Prime[j] = false; } } }}// Function to perform dfsfunction dfs(node, parent, h){ // Store the height of node height[node] = h; for (let to of graph[node]) { if (to == parent) continue; dfs(to, node, h + 1); }}// Function to find the nodes// at prime heightfunction primeHeightNode(N){ // To precompute prime number till 10^5 SieveOfEratosthenes(); for (let i = 1; i <= N; i++) { // Check if height[node] is prime if (Prime[height[i]]) { document.write(i + " "); } }}// Driver code // Number of nodes let N = 5; // Edges of the tree graph[1].push(2); graph[1].push(3); graph[2].push(4); graph[2].push(5); dfs(1, 1, 0); primeHeightNode(N);// This code is contributed by gfgking</script> |
Output:
4 5
Time Complexity: O(N+MAX*log(log(MAX)))
Auxiliary Space: O(MAX)
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



