old_contents: # Time:  O(n)
  # Space: O(h)
  
  # Definition for a binary tree node.
  # class TreeNode(object):
  #     def __init__(self, x):
  #         self.val = x
  #         self.left = None
  #         self.right = None
  
  class Solution(object):
      def longestConsecutive(self, root):
          """
          :type root: TreeNode
          :rtype: int
          """
          def longestConsecutiveHelper(root):
              if not root:
                  return 0
              left_len = longestConsecutiveHelper(root.left)
              right_len = longestConsecutiveHelper(root.right)
              cur_inc_len, cur_dec_len = 1, 1
              if root.left:
                  if root.left.val == root.val + 1:
                      cur_inc_len = max(cur_inc_len, left_len[0] + 1)
                  elif root.left.val == root.val - 1:
                      cur_dec_len = max(cur_dec_len, left_len[1] + 1)
              if root.right:
                  if root.right.val == root.val + 1:
                      cur_inc_len = max(cur_inc_len, right_len[0] + 1)
                  elif root.right.val == root.val - 1:
                      cur_dec_len = max(cur_dec_len, right_len[1] + 1)
              self.max_len = max(self.max_len, cur_dec_len + cur_inc_len - 1)
              return cur_inc_len, cur_dec_len
  
          self.max_len = 0
          longestConsecutiveHelper(root)
          return self.max_len
   
  
new_contents: # Time:  O(n)
  # Space: O(h)
  
  # Definition for a binary tree node.
  # class TreeNode(object):
  #     def __init__(self, x):
  #         self.val = x
  #         self.left = None
  #         self.right = None
  
  class Solution(object):
      def longestConsecutive(self, root):
          """
          :type root: TreeNode
          :rtype: int
          """
          def longestConsecutiveHelper(root):
              if not root:
                  return 0, 0
              left_len = longestConsecutiveHelper(root.left)
              right_len = longestConsecutiveHelper(root.right)
              cur_inc_len, cur_dec_len = 1, 1
              if root.left:
                  if root.left.val == root.val + 1:
                      cur_inc_len = max(cur_inc_len, left_len[0] + 1)
                  elif root.left.val == root.val - 1:
                      cur_dec_len = max(cur_dec_len, left_len[1] + 1)
              if root.right:
                  if root.right.val == root.val + 1:
                      cur_inc_len = max(cur_inc_len, right_len[0] + 1)
                  elif root.right.val == root.val - 1:
                      cur_dec_len = max(cur_dec_len, right_len[1] + 1)
              self.max_len = max(self.max_len, cur_dec_len + cur_inc_len - 1)
              return cur_inc_len, cur_dec_len
  
          self.max_len = 0
          longestConsecutiveHelper(root)
          return self.max_len
   
  
subject: Update binary-tree-longest-consecutive-sequence-ii.py