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

results matching ""

    No results matching ""