code: def find_max(self, predicate, max_=None):
          
          if predicate(self.value):
              max_ = self.value
              next_node = self._greater
          else:
              next_node = self._lesser
          if next_node is None:
              return max_
          return next_node.find_max(predicate, max_)
docs: Return the largest item in or under this node that satisfies
          *predicate*.