Quick actions

cmd+k|ctrl+k

Navigation

Languages

Binary Search Tree - Python

Snippet info

Language

Python

Visibility

public

Author

ztm-practice

Created

2024-07-11T18:56:05.369005Z

Updated

2024-07-11T18:56:05.369005Z

class Node(object):
    def __init__(self, value = None):
        self.value = value
        self.left = None
        self.right = None

class BST:
    def __init__(self):
        self.length = 0
        self.root = None
    
    def isEmpty(self):
        return self.length == 0
    
    def insert(self, value):
        cur = self.root
        newNode = Node(value)
        depth = 1
        if not cur:
            self.root = newNode
            self.length += 1
            return depth
        while cur:
            if value < cur.value:
                if not cur.left:
                    cur.left = newNode
                    self.length += 1
                    return depth
                cur = cur.left
                depth += 1
            elif value > cur.value:
                if not cur.right:
                    cur.right = newNode
                    self.length += 1
                    return depth
                cur = cur.right
                depth += 1
            else:
                return -1
        return depth
    
    def search(self, value):
        cur = self.root
        while cur:
            if value < cur.value:
                cur = cur.left
            elif value > cur.value:
                cur = cur.right
            else:
                return cur
        return False

    def remove(self, value):
        if not self.root:
          return false
        cur = self.root
        parent = None
        while cur:
          if value < cur.value:
            parent = cur
            cur = cur.left
          elif value > cur.value:
            parent = cur
            cur = cur.right
          elif cur.value == value:
            # No right child
            if not cur.right:
              if not parent:
                this.root = currentNode.left;
              else:
                if cur.value < parent.value:
                  parent.left = cur.left
                elif cur.value > parent.value:
                  parent.right = cur.left
            elif not cur.right.left:
              cur.right.left = cur.left
              if not parent:
                self.root = cur.right;
              else:
                if cur.value < parent.value:
                  parent.left = cur.right
                elif cur.value > parent.value:
                  parent.right = cur.right
            else:
              lMost = cur.right.left
              lMostParent = cur.right
              while lMost.left:
                lMostParent = lMost
                lMost = lMost.left
    
              lMostParent.left = leftmost.right
              lMost.left = cur.left
              lMost.right = cur.right
    
              if not parent:
                self.root = lMost
              else:
                if currentNode.value < parentNode.value:
                  parent.left = lMost
                elif cur.value > parent.value:
                  parent.right = lMost
            self.length -= 1
            return True
        
    
        
myBST = BST()
myBST.insert(4)
myBST.insert(10)
myBST.insert(1)
myBST.insert(3)
myBST.insert(5)

print(myBST.search(3))
print(myBST.search(5))

print(myBST.length)
myBST.remove(10)
print(myBST.length)
print(myBST.search(10))

INFO