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> |
4 5
Time Complexity: O(N+MAX*log(log(MAX)))
Auxiliary Space: O(MAX)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

… [Trackback]
[…] Info on that Topic: geeksforgeeks.org/print-the-nodes-of-the-binary-tree-whose-height-is-a-prime-number/ […]
… [Trackback]
[…] Find More on that Topic: geeksforgeeks.org/print-the-nodes-of-the-binary-tree-whose-height-is-a-prime-number/ […]