Java

/**

 549.Binary Tree Longest Consecutive Sequence II

 Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree.

 Especially, this path can be either increasing or decreasing.

 For example, [1,2,3,4] and [4,3,2,1] are both considered valid, but the path [1,2,4,3] is not valid.
 On the other hand, the path can be in the child-Parent-child order, where not necessarily be parent-child order.

 Example 1:

 Input:
    1
   / \
 2   3
 Output: 2
 Explanation: The longest consecutive path is [1, 2] or [2, 1].


 Example 2:

 Input:
    2
  / \
 1   3
 Output: 3
 Explanation: The longest consecutive path is [1, 2, 3] or [3, 2, 1].


 Note: All the values of tree nodes are in the range of [-1e7, 1e7].


 @tag-tree

 */
public class Binary_Tree_Longest_Consecutive_Sequence_II {


    class Solution {
        public int longestConsecutive(TreeNode root) {

            if (root == null) {
                return 0;
            }

            int res = helper(root, 1) + helper(root, -1) + 1; // +1 is increasing, -1 is decreasing
            return Math.max(res, Math.max(longestConsecutive(root.left), longestConsecutive(root.right)));
        }

        int helper(TreeNode node, int diff) {
            if (node == null) {
                return 0;
            }

            int left = 0, right = 0;
            if (node.left != null && node.val - node.left.val == diff) {
                left = 1 + helper(node.left, diff);
            }
            if (node.right != null && node.val - node.right.val == diff) {
                right = 1 + helper(node.right, diff);
            }

            return Math.max(left, right);
        }
    }
}

All Problems

All Solutions