Find the height of the binary tree given that only the nodes on the even levels are considered as the valid leaf nodes.

The height of a binary tree is the number of edges between the tree’s root and its furthest leaf. But what if we bring a twist and change the definition of a leaf node. Let us define a valid leaf node as the node that has no children and is at an even level (considering root node as an odd level node).

**Output :**Height of tree is 4

**Solution :** The approach to this problem is slightly different from the normal height finding approach. In the return step, we check if the node is a valid root node or not. If it is valid, return 1, else we return 0. Now in the recursive step- if the left and the right sub-tree both yield 0, the current node yields 0 too, because in that case there is no path from current node to a valid leaf node. But in case at least one of the values returned by the children is non-zero, it means the leaf node on that path is a valid leaf node, and hence that path can contribute to the final result, so we return max of the values returned + 1 for the current node.

`/* Program to find height of the tree considering ` ` ` `only even level leaves. */` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `/* A binary tree node has data, pointer to ` ` ` `left child and a pointer to right child */` `struct` `Node { ` ` ` `int` `data; ` ` ` `struct` `Node* left; ` ` ` `struct` `Node* right; ` `}; ` ` ` `int` `heightOfTreeUtil(Node* root, ` `bool` `isEven) ` `{ ` ` ` `// Base Case ` ` ` `if` `(!root) ` ` ` `return` `0; ` ` ` ` ` `if` `(!root->left && !root->right) { ` ` ` `if` `(isEven) ` ` ` `return` `1; ` ` ` `else` ` ` `return` `0; ` ` ` `} ` ` ` ` ` `/*left stores the result of left subtree, ` ` ` `and right stores the result of right subtree*/` ` ` `int` `left = heightOfTreeUtil(root->left, !isEven); ` ` ` `int` `right = heightOfTreeUtil(root->right, !isEven); ` ` ` ` ` `/*If both left and right returns 0, it means ` ` ` `there is no valid path till leaf node*/` ` ` `if` `(left == 0 && right == 0) ` ` ` `return` `0; ` ` ` ` ` `return` `(1 + max(left, right)); ` `} ` ` ` `/* Helper function that allocates a new node with the ` ` ` `given data and NULL left and right pointers. */` `struct` `Node* newNode(` `int` `data) ` `{ ` ` ` `struct` `Node* node = ` ` ` `(` `struct` `Node*)` `malloc` `(` `sizeof` `(` `struct` `Node)); ` ` ` `node->data = data; ` ` ` `node->left = NULL; ` ` ` `node->right = NULL; ` ` ` ` ` `return` `(node); ` `} ` ` ` `int` `heightOfTree(Node* root) ` `{ ` ` ` `return` `heightOfTreeUtil(root, ` `false` `); ` `} ` ` ` `/* Driver program to test above functions*/` `int` `main() ` `{ ` ` ` `// Let us create binary tree shown in above diagram ` ` ` `struct` `Node* root = newNode(1); ` ` ` ` ` `root->left = newNode(2); ` ` ` `root->right = newNode(3); ` ` ` `root->left->left = newNode(4); ` ` ` `root->left->right = newNode(5); ` ` ` `root->left->right->left = newNode(6); ` ` ` `cout << ` `"Height of tree is "` `<< heightOfTree(root); ` ` ` `return` `0; ` `} ` |

Output:

Height of tree is 4

**Time Complexity:**O(n) where n is number of nodes in given binary tree.

## Recommended Posts:

- Find n-th node in Postorder traversal of a Binary Tree
- Height of a complete binary tree (or Heap) with N nodes
- Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
- Select a Random Node from a tree with equal probability
- Advantages of Trie Data Structure
- Deepest right leaf node in a binary tree | Iterative approach
- Find next right node of a given key | Set 2
- Succinct Encoding of Binary Tree
- Find the closest leaf in a Binary Tree
- Find Height of Binary Tree represented by Parent array
- Minimum no. of iterations to pass information to all nodes in the tree
- Morris traversal for Preorder
- How to determine if a binary tree is height-balanced?
- Diameter of a Binary Tree
- Write a Program to Find the Maximum Depth or Height of a Tree

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.