4.2. Medium

98. Validate Binary Search Tree

98. Validate Binary Search Tree

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        return self.helper(root, float('-inf'), float('inf'))

    def helper(self, root, lower, upper):
        if not root:
            return True
        return root.val > lower and root.val < upper \
            and self.helper(root.left, lower, root.val) \
            and self.helper(root.right, root.val, upper)

109. Convert Sorted List to Binary Search Tree

109. Convert Sorted List to Binary Search Tree

class Solution:
    def sortedListToBST(self, head: ListNode) -> TreeNode:
        lst = []
        while head:
            lst.append(head.val)
            head = head.next
        return self.helper(lst, 0, len(lst) - 1)

    def helper(self, lst, start, end):
        if start > end:
            return None
        if start == end:
            return TreeNode(lst[start])
        mid = (start + end) >> 1
        root = TreeNode(lst[mid])
        root.left = self.helper(lst, start, mid - 1)
        root.right = self.helper(lst, mid + 1, end)
        return root

230. Kth Smallest Element in a BST

230. Kth Smallest Element in a BST

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        res = []
        self.helper(root, res)
        return res[k-1]

    def helper(self, root, res):
        if not root:
            return
        self.helper(root.left, res)
        res.append(root.val)
        self.helper(root.right, res)

1038. Binary Search Tree to Greater Sum Tree

1038. Binary Search Tree to Greater Sum Tree

class Solution:
    def bstToGst(self, root: TreeNode) -> TreeNode:
        self.sum = 0
        self.helper(root)
        return root

    def helper(self, node):
        if not node:
            return
        self.helper(node.right)
        node.val += self.sum
        self.sum = node.val
        self.helper(node.left)