@@ -71,3 +71,99 @@ def contains(self, value):
71
71
else :
72
72
temp = temp .right
73
73
return False
74
+
75
+ def __r_contains (self , current_node , value ):
76
+ if current_node is None :
77
+ return False
78
+ if value == current_node .value :
79
+ return True
80
+ if value < current_node .value :
81
+ return self .__r_contains (current_node .left , value )
82
+ else :
83
+ return self .__r_contains (current_node .right , value )
84
+
85
+ def r_contains (self , value ):
86
+ return self .__r_contains (self .root , value )
87
+
88
+ def __r_insert (self , current_node , value ):
89
+ if current_node is None :
90
+ return Node (value )
91
+ if value < current_node .value :
92
+ current_node .left = self .__r_insert (current_node .left , value )
93
+ elif value > current_node .value :
94
+ current_node .right = self .__r_insert (current_node .right , value )
95
+ return current_node
96
+
97
+ def r_insert (self , value ):
98
+ if self .root is None :
99
+ self .root = Node (value )
100
+ self .__r_insert (self .root , value )
101
+
102
+ def min_value (self , current_node ):
103
+ while current_node .left is not None :
104
+ current_node = current_node .left
105
+ return current_node .value
106
+
107
+ def __delete_node (self , current_node , value ):
108
+ if current_node is None :
109
+ return None
110
+ if value < current_node .value :
111
+ current_node .left = self .__delete_node (current_node .left , value )
112
+ elif value > current_node .value :
113
+ current_node .right = self .__delete_node (current_node .right , value )
114
+ else :
115
+ if current_node .left is None and current_node .right is None :
116
+ return None
117
+ elif current_node .left is None :
118
+ current_node = current_node .right
119
+ elif current_node .right is None :
120
+ current_node = current_node .left
121
+ else :
122
+ sub_tree_min = self .min_value (current_node .right )
123
+ current_node .value = sub_tree_min
124
+ current_node .right = self .__delete_node (current_node .right , sub_tree_min )
125
+ return current_node
126
+
127
+ def delete_node (self , value ):
128
+ self .root = self .__delete_node (self .root , value )
129
+
130
+ def bfs (self ):
131
+ current_node = self .root
132
+ queue = []
133
+ results = []
134
+ queue .append (current_node )
135
+ while queue :
136
+ current_node = queue .pop (0 )
137
+ results .append (current_node .value )
138
+ if current_node .left :
139
+ queue .append (current_node .left )
140
+ if current_node .right :
141
+ queue .append (current_node .right )
142
+ return results
143
+
144
+ def dfs_preorder (self ):
145
+ results = []
146
+
147
+ def traverse (current_node ):
148
+ results .append (current_node .value )
149
+ if current_node .left :
150
+ traverse (current_node .left )
151
+ if current_node .right :
152
+ traverse (current_node .right )
153
+
154
+ traverse (self .root )
155
+ return results
156
+
157
+ def dfs_postorder (self ):
158
+ pass
159
+
160
+
161
+ bst = BinarySearchTree ()
162
+ bst .r_insert (47 )
163
+ bst .r_insert (21 )
164
+ bst .r_insert (76 )
165
+ bst .r_insert (18 )
166
+ bst .r_insert (27 )
167
+ bst .r_insert (52 )
168
+ bst .r_insert (82 )
169
+ print (bst .dfs_preorder ())
0 commit comments