If we program in oop way, we're provided flexibility for self.var
class Solution:
def isValidBST(self, root):
self.lastVal = - 2**32
self.isBST = True
self.valid(root)
return self.isBST
def valid(self, node): # in-order traversal
if node is None:
return
self.valid(node.left)
if self.lastVal >= node.val:
self.isBST = None
return
self.lastVal = node.val
self.valid(node.right)
But if we program in functional way:
def isBST(root):
is_bst = True
last_val = -2 ** 32
def valid(node):
if node == None:
return
valid(node.left)
if node.val <= last_val:
is_bst = False
return
last_val = node.val
valid(node.right)
valid(root)
return is_bst
we will meet the issue:
local variable 'last_val' referenced before assignment.
Is there any way we can leverage self.var's flexibility in python functional programming?