leetcode 98. Validate Binary Search Tree (Python)

Leetcode 98. Validate Binary Search Tree (Python)

Related Topic

Depth-First-Search. Tree. Inorder-Traversal.

Description

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node’s key.
  • The right subtree of a node contains only nodes with keys greater than the node’s key.
  • Both the left and right subtrees must also be binary search trees.

Sample I/O

Example 1

    2
   / \
  1   3

Input: [2,1,3]
Output: true

Example 2

    5
   / \
  1   4
     / \
    3   6

Input: [5,1,4,null,null,3,6]
Output: false
Explanation: The root node's value is 5 but its right child's value is 4.

Methodology

This question can be solved by Depth First Search and Inorder Traversal.

Use In Order Traversal to re-organize the input and get an inordered list, if the inordered list satisfy the binary serach requirements (in order traversal a binary search tree return a continous increament list) we return True else return False.

Code

def isValidBST(self, root: TreeNode) -> bool:
        if not root:
            return True
        
        def inOrder(root, order):
            if root is None:
                return
            inOrder(root.left, order)
            order.append(root.val)
            inOrder(root.right, order)
            
        order = []
        inOrder(root, order)
        for i in range(1, len(order)):
            if order[i] <= order[i-1]:
                return False
        return True

BigO

We traversal the tree with in-order therefore the time complexity is O(n) and then we go through the inordered list the time complexity is O(n). In total is O(2n)

Search

    Table of Contents