1

I am currently trying to check if a tree is a BST, while keeping notice of the fact that the values must not be equal to any other one in the tree. I tried keeping count of the interval on which each value should be ( considering a min and a max as arg[0] and arg[1]). If we are for example going all the way down on the left subtree, there will be no min, only a max. However, when we switch to the right, we will also have a minimum ( the value of the root node we just switched right from). However, my code is not showing the right answer and i have no idea why. Could you please help me? These are my functions: ( i am resolving this on hackerrank therefore that's why i have two functions instead of one)

""" Node is defined as
class node:
  def __init__(self, data):
      self.data = data
      self.left = None
      self.right = None
"""
def check_binary_search_tree_(root):
    check_bst(root,None,None)

def check_bst(root,*arg):
    res, res2 = True, True

    if arg[0] is None and arg[1] is not None:
        if root.data >=arg[1]:
            return False
    elif arg[1] is None and arg[0] is not None:
        if root.data <= arg[0]:
            return False
    elif arg[1] is not None and arg[0] is not None and (root.data<=arg[0] or root.data >= arg[1]):
        return False
    if root.left: 
        res = check_bst(root.left, arg[0], root.data)
    if root.right:
        res2= check_bst(root.right, root.data, arg[1])

    if not res or not res2:
        return False
    return True
greggo
  • 3,009
  • 2
  • 23
  • 22
Mary Poppins
  • 79
  • 13

1 Answers1

0

Your problem here is that you don't have the check_binary_search_tree_ function that HackerRank calls returning anything. Instead of this

def check_binary_search_tree_(root):
    check_bst(root,None,None)

you should be doing this

def check_binary_search_tree_(root):
    return check_bst(root,None,None)
Tané Tachyon
  • 1,092
  • 8
  • 11