From b69bc7db19e04bf9c3685c41a8671364e3b1b041 Mon Sep 17 00:00:00 2001 From: marina <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Thu, 3 Aug 2023 12:38:44 -0700 Subject: [PATCH] Create is_valid_bst.py --- trees/is_valid_bst.py | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 trees/is_valid_bst.py diff --git a/trees/is_valid_bst.py b/trees/is_valid_bst.py new file mode 100644 index 0000000..ec7a1dc --- /dev/null +++ b/trees/is_valid_bst.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +def is_valid_bst_recursive(root): + + def is_valid(root, min_val=float(-inf), max_val=float(inf)): + if root is None: + return True + + return (min_val < root.val < max_val) and \ + is_valid(root.left, min_val, root.val) and \ + is_valid(root.right, root.val, max_val) + + return is_valid(root) + + +def is_valid_bst_iterative(root): + + queue = deque() + queue.append((root, float(-inf), float(inf))) + + while queue: + node, min_val, max_val = queue.popleft() + if node: + if min_val >= node.val or node.val >= max_val: + return False + if node.left: + queue.append((node.left, min_val, node.val)) + if node.right: + queue.append((node.right, node.val, max_val)) + + return True + + +def is_valid_bst_inorder(root): + + def inorder(node): + if node is None: + return True + + inorder(node.left) + queue.append(node.val) + inorder(node.right) + + queue = [] + inorder(root) + for i in range(1, len(queue)): + if queue[i] <= queue[i-1]: + return False + + return True +