Given a parent array P, where P[i] indicates the parent of ith node in the tree(assume parent of root node id indicated with -1). Find the height of the tree.
Examples:
Input : array[] = [-1 0 1 6 6 0 0 2 7]
Output : height = 5
Tree formed is:
0
/ | \
5 1 6
/ | \
2 4 3
/
7
/
8
1. Start at each node and keep going to its parent until we reach -1.
2. Also keep track of the maximum height among all nodes.
C++
// C++ program to find the height of the generic // tree(n-ary tree) if parent array is given #include <bits/stdc++.h> using namespace std; // function to find the height of tree int findHeight(int* parent, int n) { int res = 0; // Traverse each node for (int i = 0; i < n; i++) { // traverse to parent until -1 // is reached int p = i, current = 1; while (parent[p] != -1) { current++; p = parent[p]; } res = max(res, current); } return res; } // Driver program int main() { int parent[] = { -1, 0, 1, 6, 6, 0, 0, 2, 7 }; int n = sizeof(parent) / sizeof(parent[0]); int height = findHeight(parent, n); cout << "Height of the given tree is: " << height << endl; return 0; } |
Java
// Java program to find the height of // the generic tree(n-ary tree) if // parent array is given import java.io.*; public class GFG { // function to find the height of tree static int findHeight(int[] parent, int n) { int res = 0; // Traverse each node for (int i = 0; i < n; i++) { // traverse to parent until -1 // is reached int p = i, current = 1; while (parent[p] != -1) { current++; p = parent[p]; } res = Math.max(res, current); } return res; } // Driver program static public void main(String[] args) { int[] parent = { -1, 0, 1, 6, 6, 0, 0, 2, 7 }; int n = parent.length; int height = findHeight(parent, n); System.out.println("Height of the " + "given tree is: " + height); } } // This code is contributed by vt_m. |
Python3
# Python program to find the height of the generic # tree(n-ary tree) if parent array is given # function to find the height of tree def findHeight(parent, n): res = 0 # Traverse each node for i in range(n): # traverse to parent until -1 # is reached p = i current = 1 while (parent[p] != -1): current+= 1 p = parent[p] res = max(res, current) return res # Driver code if __name__ == '__main__': parent = [-1, 0, 1, 6, 6, 0, 0, 2, 7] n = len(parent) height = findHeight(parent, n) print("Height of the given tree is:", height) # This code is contributed by SHUBHAMSINGH10 |
C#
// C# program to find the height of // the generic tree(n-ary tree) if // parent array is given using System; public class GFG { // function to find the height of tree static int findHeight(int[] parent, int n) { int res = 0; // Traverse each node for (int i = 0; i < n; i++) { // traverse to parent until -1 // is reached int p = i, current = 1; while (parent[p] != -1) { current++; p = parent[p]; } res = Math.Max(res, current); } return res; } // Driver program static public void Main() { int[] parent = { -1, 0, 1, 6, 6, 0, 0, 2, 7 }; int n = parent.Length; int height = findHeight(parent, n); Console.WriteLine("Height of the " + "given tree is: " + height); } } // This code is contributed by vt_m. |
Height of the given tree is: 5
Optimized approach
We use dynamic programming. We store height from root to each node in an array.
So if we know height of root to a node then we can get height from root to nodes child by simply adding 1.
// C++ program to find the height of the generic // tree(n-ary tree) if parent array is given #include <bits/stdc++.h> using namespace std; // function to fill the height vector int rec(int i, int parent[], vector<int> height) { // if we have reached root node the // return 1 as height of root node if (parent[i] == -1) { return 1; } // if we have calculated height of a // node then return if if (height[i] != -1) { return height[i]; } // height from root to a node = height // from root to nodes parent + 1 height[i] = rec(parent[i], parent, height) + 1; // return nodes height return height[i]; } // function to find the height of tree int findHeight(int* parent, int n) { int res = 0; // vector to store heights of all nodes vector<int> height(n, -1); for (int i = 0; i < n; i++) { res = max(res, rec(i, parent, height)); } return res; } // Driver program int main() { int parent[] = { -1, 0, 1, 6, 6, 0, 0, 2, 7 }; int n = sizeof(parent) / sizeof(parent[0]); int height = findHeight(parent, n); cout << "Height of the given tree is: " << height << endl; return 0; } |
Height of the given tree is: 5
Time complexity :- O(n)
Space complexity :- O(n)
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
This article is contributed by Prakriti Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
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:
- Find Height of Binary Tree represented by Parent array
- Height of a generic tree from parent array
- Find parent of given node in a Binary Tree with given postorder traversal
- Construct Binary Tree from given Parent Array representation
- Construct Binary Tree from given Parent Array representation | Iterative Approach
- Check if a given Binary Tree is height balanced like a Red-Black Tree
- Find the parent of a node in the given binary tree
- Lowest Common Ancestor in a Binary Tree | Set 2 (Using Parent Pointer)
- Find right sibling of a binary tree with parent pointers
- Ways to color a skewed tree such that parent and child have different colors
- Maximum parent children sum in Binary tree
- Count all Grandparent-Parent-Child Triplets in a binary tree whose sum is greater than X
- Sum of all parent-child differences in a Binary Tree
- Find parent of each node in a tree for multiple queries
- Sum of all the child nodes with even parent values in a Binary Tree
- Possible edges of a tree for given diameter, height and vertices
- Lowest Common Ancestor in Parent Array Representation
- Write a Program to Find the Maximum Depth or Height of a Tree
- How to determine if a binary tree is height-balanced?
- Iterative Method to find Height of Binary Tree

