1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { private int ans = 0;
public int longestConsecutive(TreeNode root) { helper(root); return ans; }
private int helper(TreeNode node) { if (node == null) { return 0; } int leftTreeStreak = helper(node.left); int rightTreeStreak = helper(node.right); int currStreak = 1; if (node.left != null && node.val + 1 == node.left.val) { currStreak = Math.max(currStreak, leftTreeStreak + 1); } if (node.right != null && node.val + 1 == node.right.val) { currStreak = Math.max(currStreak, rightTreeStreak + 1); } ans = Math.max(ans, currStreak); return currStreak; } }
|
也是让每个node都当头, 看看能组成的sequence有多长. 递归函数的功能就是告诉我们某个node作为头的时候, 最长的sequence是多少.
时间复杂度: O(n)
空间复杂度: O(n)