I think I want to do a battery of tree exercises. Here’s one. The names some of these community-contributed questions come up with are quite striking.
We can either think about maintaining some global, “ah, here is the value we should compare again”, or we can exploit the transitive nature of equality.
class Solution(object):
def isUnivalTree(self, root):
if root is None: return True
if root.left is not None and root.left.val != root.val:
return False
if root.right is not None and root.right.val != root.val:
return False
return self.isUnivalTree(root.left) and self.isUnivalTree(root.right)
Hey, let’s do the global approach too, why not. Well, not global exactly, but you know.
class Solution(object):
def isUnivalTreeInternal(self, root):
if root is None: return True
if root.val != self.val: return False
return self.isUnivalTreeInternal(root.left) and self.isUnivalTreeInternal(root.right)
def isUnivalTree(self, root):
if root is None: return True
self.val = root.val
return self.isUnivalTreeInternal(root)