-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_search_tree.py
105 lines (105 loc) · 2.91 KB
/
binary_search_tree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
class Node:
def __init__(self,data=None):
self.data=data
self.left=None
self.right=None
class BinarySearchTree:
def __init__(self):
self.root=None
def insert(self,value):
if self.root is None:
self.root=Node(value)
else:
self._insertNode(value,self.root)
def _insertNode(self,data,cur):
if data<cur.data:
if cur.left is None:
cur.left=Node(data)
else:
self._insertNode(data,cur.left)
elif data>cur.data:
if cur.right is None:
cur.right=Node(data)
else:
self._insertNode(data,cur.right)
else:
pass
def BSTchecker(self):
if self.root:
is_bst_satisfied=self._is_bst_checker(self.root,self.root.data)
if is_bst_satisfied is None:
return True
return False
return True
def _is_bst_checker(self,cur,data):
if cur.left:
if cur.left.data<data:
return self._is_bst_checker(cur.left,cur.left.data)
else:
return False
if cur.right:
if cur.right.data>data:
return self._is_bst_checker(cur.right,cur.right.data)
else:
return False
def search_ele(self,fddata):
cur=self.root
while cur:
if fddata==cur.data:
return "Found"
if cur.data>fddata:
cur=cur.left
else:
cur=cur.right
return "Not Found"
def min_ele(self):
cur=self.root
if cur is None:
return None
while cur.left:
cur=cur.left
return cur.data
def max_ele(self):
cur=self.root
if cur is None:
return None
while cur.right:
cur=cur.right
return cur.data
def successorBST(self):
cur=None
if cur.right:
cur=cur.right
while cur.left:
cur=cur.left
return cur
def predecessorBST(self):
cur=None
if cur.left:
cur=cur.left
while cur.right:
cur=cur.right
return cur
def print_bst(self):
if self.root:
self._print_bst(self.root)
def _print_bst(self,cur):
if cur:
self._print_bst(cur.left)
print(cur.data,end="-->")
self._print_bst(cur.right)
bst=BinarySearchTree()
bst.insert(10)
bst.insert(9)
bst.insert(8)
bst.insert(12)
bst.insert(11)
bst.insert(13)
bst.print_bst()
print(bst.BSTchecker())
tree=BinarySearchTree()
tree.root=Node(1)
tree.root.left=Node(2)
tree.root.right=Node(3)
print(tree.print_bst())
print(tree.BSTchecker())