I am not used to generators and wonder how to make code cleaner/Pythonic? in the generator part.
The function is about validating a binary search tree. The inorder_gen
function yield one element a time. The main function compares the value yielded and previous yielded value to determine whether BST’s invariant is violated.
# 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 isValidBST(self, root): """ :type root: TreeNode :rtype: bool """ last_val = None for idx, v in enumerate(self.inorder_gen(root)): if idx != 0 and v <= last_val: return False last_val = v return True def inorder_gen(self, node): if node is None: return if node.left != None: for v in self.inorder_gen(node.left): yield v yield node.val if node.right != None: for v in self.inorder_gen(node.right): yield v
Please let me know if I did not make it clear. I appreciate your help.