Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

class BST:

def __init__(self,key):
self.key=key
self.left=None
self.right=None
def insert(self,data):
if self.key is None:
self.key= data
else:
if self.key>data:
if self.left is not None:
self.left.insert(data)
else:
self.left=BST(data)
if self.key<data:
if self.right is not None:
self.right.insert(data)
else:
self.right=BST(data)

def search(self,data):
if self.key is None:
print("Tree is empty!")
else:
if self.key == data:
print("Data present!")
elif self.key>=data:
if self.left:
self.left.search(data)
else:
print("Data not present!")
else:
if self.key <= data:
if self.right:
self.right.search(data)
else:
print("Data not present")

def preOrder(self):
if self.key is None:
print("Tree is not present!")
else:
print(self.key,end=",")
if self.left:
self.left.preOrder()
if self.right:
self.right.preOrder()

def inOrder(self):
if self.key is None:
print("Tree is not present!")
else:
if self.left:
self.left.inOrder()
print(self.key, end=",")
if self.right:
self.right.inOrder()

def postOrder(self):
if self.key is None:
print("Tree is not present!")
else:
if self.left:
self.left.postOrder()
if self.right:
self.right.postOrder()
print(self.key, end=",")

def delete(self,data,curr): #curr only needed if root node deletion is necessary


if self.key is None:
print("Tree is empty! Can't Delete.")
elif self.key>data:
if self.left:
self.left = self.left.delete(data,None)
else:
print("Data not present in tree!")
elif self.key<data:
if self.right:
self.right=self.right.delete(data,None)
else:
print("Data not present in tree!")
else:
if self.left is None:
temp=self.right
#root Node deletion - if condition
if data==curr:
self.key=temp.key
self.left=temp.left
self.right=temp.right
temp=None
return
self=None
return temp
if self.right is None:
temp=self.left
# root Node deletion -if condition
if data==curr:
self.key=temp.key
self.left=temp.left
self.right=temp.right
temp=None
return
self=None
return temp
node = self.right
while node.left:
node=node.left
self.key=node.key
self.right=self.right.delete(node.key,None)
return self

def delete_wo_rootnode(self,data):
if self.key is None:
print("Tree is empty! Can't Delete.")
elif self.key>data:
if self.left:
self.left = self.left.delete_wo_rootnode(data)
else:
print("Data not present in tree!")
elif self.key<data:
if self.right:
self.right=self.right.delete_wo_rootnode(data)
else:
print("Data not present in tree!")
else:
if self.left is None:
temp=self.right
self = None
return temp
if self.right is None:
temp=self.left
self=None
return temp
node = self.right
while node.left:
node=node.left
self.key=node.key
self.right=self.right.delete_wo_rootnode(node.key)
return self

def minimum(self):
current=self
while current.left:
current=current.left
print(current.key)

def maximum(self):
current=self
while current.right:
current=current.right
print(current.key)

def count(node):
if node is None:
return 0
else:
return 1+count(node.left)+count(node.right)

root=BST(10)
li=[1,3,6,98,12,10]
for i in li:
root.insert(i)
'''
root.search(12)
print("PreOrder")
root.preOrder()
print("")
print("Inorder")
root.inOrder()
print("")
print("Postorder")
root.postOrder()
root.delete(10)
print(" ")
print("Inorder-After Deletion")

root.inOrder()
print(" ")
if count(root)>1:
root.delete(10,root.key)
else:
print("Can't delete tree having only one node")
'''

#root.delete_wo_rootnode(98)
root.inOrder()
print()
root.preOrder()
print("")
root.minimum()
root.maximum()

You might also like