Given a Binary Tree, find count of distinct nodes in a root to leaf path with maximum distinct nodes.
Input : 1 / \ 2 3 / \ / \ 4 5 6 3 \ \ 8 9 Output : 4 The root to leaf path with maximum distinct nodes is 1-3-6-8.
A simple solution is to explore all root to leaf paths. In every root to leaf path, count distinct nodes and finally return the maximum count.
An efficient solution is to use hashing. We recursively traverse the tree and maintain count of distinct nodes on path from root to current node. We recur for left and right subtrees and finally return maximum of two values.
Below is implementation of above idea
// C# program to find count of distinct nodes
// on a path with maximum distinct nodes.
// A node of binary tree
public class Node
public int data;
public Node left, right;
// A utility function to create a new Binary
// Tree node
static Node newNode(int data)
Node temp = new Node();
temp.data = data;
temp.left = temp.right = null;
static int largestUinquePathUtil(Node node,
if (node == null)
// put this node into hash
m[node.data] = m[node.data] + 1;
int max_path = Math.Max(largestUinquePathUtil(node.left, m),
// remove current node from path “hash”
m[node.data] = m[node.data] – 1;
// if we reached a condition where all
// duplicate value of current node is deleted
if (m[node.data] == 0)
// A utility function to find long unique value path
static int largestUinquePath(Node node)
if (node == null)
// hash that store all node value
// return max length unique value path
return largestUinquePathUtil(node, hash);
// Driver Code
public static void Main(String args)
// Create binary tree shown in above figure
Node root = newNode(1);
root.left = newNode(2);
root.right = newNode(3);
root.left.left = newNode(4);
root.left.right = newNode(5);
root.right.left = newNode(6);
root.right.right = newNode(7);
root.right.left.right = newNode(8);
root.right.right.right = newNode(9);
// This code is contributed by 29AjayKumar
Time Complexity :O(n)
This article is contributed by Nishant Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
- Sum of nodes on the longest path from root to leaf node
- Find the maximum sum leaf to root path in a Binary Tree
- Find if there is a pair in root to a leaf path with sum equals to root's data
- Implementing a BST where every node stores the maximum number of nodes in the path till any leaf
- GCD from root to leaf path in an N-ary tree
- Root to leaf path sum equal to a given number
- Check if there is a root to leaf path with given sequence
- Shortest root to leaf path sum equal to a given number
- Root to leaf path product equal to a given number
- Print the first shortest root to leaf path in a Binary Tree
- Remove nodes on root to leaf paths of length < K
- Print the path common to the two paths from the root to the two given nodes
- Print path from root to all nodes in a Complete Binary Tree
- Maximum XOR with given value in the path from root to given node in the tree
- Maximum sum of leaf nodes among all levels of the given binary 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 email@example.com. 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.