1+ class Tree :
2+ def __init__ (self , val = None ) -> None :
3+ self .value = val
4+
5+ if self .value :
6+ self .left = Tree ()
7+ self .right = Tree ()
8+ else :
9+ self .left = None
10+ self .right = None
11+
12+ def isEmpty (self ):
13+ return (self .value == None )
14+
15+ def isleaf (self ):
16+ # Check if the tree node is a leaf node (both left and right children are None)
17+ if self .left .left == None and self .right .right == None :
18+ return True
19+ else :
20+ return False
21+
22+ def insert (self , data ):
23+ if self .isempty ():
24+ # If the current node is empty, insert the data as its value
25+ self .value = data
26+ # Create empty left and right children
27+ self .left = Tree ()
28+ self .right = Tree ()
29+ elif self .value == data :
30+ # If the data already exists in the tree, return
31+ return
32+ elif data < self .value :
33+ # If the data is less than the current node's value, insert it into the left subtree
34+ self .left .insert (data )
35+ return
36+ elif data > self .value :
37+ # If the data is greater than the current node's value, insert it into the right subtree
38+ self .right .insert (data )
39+ return
40+
41+ def find (self , v ):
42+ if self .isEmpty ():
43+ print ("{} is not found" .format (v ))
44+ return False
45+ if self .value == v :
46+ print ("{} is found" .format (v ))
47+ return True
48+ if v < self .value :
49+ return self .left .find (v )
50+ else :
51+ return self .right .find (v )
52+
53+ def inorder (self ):
54+ if self .isempty ():
55+ # If the tree is empty, return an empty list
56+ return []
57+ else :
58+ # Return the inorder traversal of the tree (left subtree, root, right subtree)
59+ return self .left .inorder () + [self .value ] + self .right .inorder ()
60+
61+ def maxval (self ):
62+ # Find the maximum value in the Tree
63+ if self .right .right == None :
64+ return (self .value )
65+ else :
66+ return (self .right .maxval ())
67+
68+ def delete (self , v ):
69+ # Delete a value from the Tree
70+ if self .isempty ():
71+ return
72+ if v < self .value :
73+ self .left .delete (v )
74+ return
75+ if v > self .value :
76+ self .right .delete (v )
77+ return
78+ if v == self .value :
79+ if self .isleaf ():
80+ self .value = None
81+ self .left = None
82+ self .right = None
83+ return
84+ elif self .left .isempty ():
85+ self .value = self .right .value
86+ self .left = self .right .left
87+ self .right = self .right .right
88+ return
89+ else :
90+ self .value = self .left .maxval ()
91+ self .left .delete (self .left .maxval ())
92+ return
93+
94+ # Test the Tree class
95+ t = Tree (15 )
96+ t .insert (10 )
97+ t .insert (18 )
98+ t .insert (4 )
99+ t .insert (11 )
100+ t .insert (16 )
101+ t .insert (20 )
102+ print ("Before deleting 4: " )
103+ print (t .inorder ())
104+ t .delete (4 )
105+ print ("After deleting 4: " )
106+ print (t .inorder ())
0 commit comments