Skip to content

Commit 08cc6c2

Browse files
authored
Merge pull request DeepNinja07x#74 from ervaibhavkumar/patch-1
Created class which implements binary search tree.
2 parents af4b479 + e33858a commit 08cc6c2

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
class Node:
2+
def __init__(self, key, left=None, right=None, parent=None):
3+
self.key = key
4+
self.right = right
5+
self.left = left
6+
7+
def hasLeftChild(self):
8+
return self.left
9+
10+
def hasRightChild(self):
11+
return self.right
12+
13+
def isLeaf(self):
14+
return not (self.right or self.left)
15+
16+
def isRoot(self):
17+
return not self.parent
18+
19+
def __str__(self):
20+
return self.key
21+
22+
23+
class Tree:
24+
def __init__(self):
25+
self.root = None
26+
self.size = 0
27+
28+
def _addNode(self, current, value):
29+
if value < current.key:
30+
if current.left != None:
31+
self._addNode(current.left, value)
32+
else:
33+
current.left = Node(value, parent=current)
34+
if value > current.key:
35+
if current.right != None:
36+
self._addNode(current.right, value)
37+
else:
38+
current.right = Node(value, parent=current)
39+
40+
def addNode(self, value):
41+
if self.root == None:
42+
self.root = Node(value)
43+
else:
44+
self._addNode(self.root, value)
45+
self.size += 1
46+
47+
def _search(self, current, value):
48+
if current == None:
49+
print("searched value is not in tree")
50+
return None
51+
if current.key == value:
52+
print("value found")
53+
return current
54+
elif current.key < value:
55+
return self._search(current.right, value)
56+
elif current.key > value:
57+
return self._search(current.left, value)
58+
59+
def search(self, value):
60+
return self._search(self.root, value)
61+
62+
def getMin(self, current):
63+
if current == None:
64+
return None
65+
if current.left == None:
66+
return current
67+
else:
68+
return self.getMin(current.left)
69+
70+
def _deleteNode(self, current, value):
71+
if current == None:
72+
return None
73+
if current.key < value:
74+
current.right = self._deleteNode(current.right, value)
75+
elif current.key > value:
76+
current.left = self._deleteNode(current.left, value)
77+
else:
78+
if current.left == None:
79+
tmp = current.right
80+
del current
81+
return tmp
82+
if current.right == None:
83+
tmp = current.left
84+
del current
85+
return tmp
86+
replacedNode = self.getMin(current.right)
87+
current.key = replacedNode.key
88+
current.right = self._deleteNode(current.right, replacedNode.key)
89+
return current
90+
91+
def deleteNode(self, value):
92+
self._deleteNode(self.root, value)
93+
94+
def _prtTree(self, current):
95+
if current == None:
96+
return
97+
print(current.key)
98+
self._prtTree(current.left)
99+
self._prtTree(current.right)
100+
101+
def prtTree(self):
102+
self._prtTree(self.root)

0 commit comments

Comments
 (0)