Longest Univalue Path
Problem
Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through the root.
Note: The length of path between two nodes is represented by the number of edges between them.
Example 1:
Input:
5
/ \
4 5
/ \ \
1 1 5
Output:
2
Example 2:
Input:
1
/ \
4 5
/ \ \
4 4 5
Output:
2
Note: The given binary tree has not more than 10000 nodes. The height of the tree is not more than 1000.
Solution
Recursive Solution
public class Solution {
public int longestUnivaluePath(TreeNode root) {
if (root == null) return 0;
int sub = Math.max(longestUnivaluePath(root.left), longestUnivaluePath(root.right));
return Math.max(helper(root.left, root.val) + helper(root.right, root.val), sub);
}
private int helper(TreeNode node, int val) {
if (node == null || node.val != val) return 0;
return 1 + Math.max(helper(node.left, val), helper(node.right, val));
}
}
Analysis
This is my intuitive recursive solution
From the root
, we can either pick it or not pick it
Hence we first have sub
as the max of root.left
or root.right
in calling longestUnivaluePath()
method
Then we return the max of either sub
or sum of left and right in calling helper()
method