0% found this document useful (0 votes)
36 views4 pages

Tree

This document defines a Binary Search Tree (BST) class with methods for initialization, insertion, searching, traversal (preorder, inorder, postorder), deletion, finding minimum/maximum values, and counting nodes. The BST allows insertion/searching in O(log n) time and supports deletion by replacing nodes, finding the minimum value in the right subtree, or merging subtrees.

Uploaded by

Paradox Banerjee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views4 pages

Tree

This document defines a Binary Search Tree (BST) class with methods for initialization, insertion, searching, traversal (preorder, inorder, postorder), deletion, finding minimum/maximum values, and counting nodes. The BST allows insertion/searching in O(log n) time and supports deletion by replacing nodes, finding the minimum value in the right subtree, or merging subtrees.

Uploaded by

Paradox Banerjee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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