-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathW7_L4_PythonCode.py
More file actions
110 lines (89 loc) · 2.7 KB
/
Copy pathW7_L4_PythonCode.py
File metadata and controls
110 lines (89 loc) · 2.7 KB
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
106
107
108
109
110
class Tree:
# Empty node has self.value, self.left, self.right = None
# Leaf has self.value != None, and self.left, self.right point to empty node
# Constructor: create an empty node or a leaf node, depending on initval
def __init__(self,initval=None):
self.value = initval
if self.value:
self.left = Tree()
self.right = Tree()
else:
self.left = None
self.right = None
return
# Only empty node has value None
def isempty(self):
return (self.value == None)
# Leaf nodes have both children empty
def isleaf(self):
return (self.left.isempty() and self.right.isempty())
# Convert a leaf node to an empty node
def makeempty(self):
self.value = None
self.left = None
self.right = None
return
# Copy right child values to current node
def copyright(self):
self.value = self.right.value
self.left = self.right.left
self.right = self.right.right
return
# Check if value v occurs in tree
def find(self,v):
if self.isempty():
return(False)
if self.value == v:
return(True)
if v < self.value:
return(self.left.find(v))
if v > self.value:
return(self.right.find(v))
# Insert value v in tree
def insert(self,v):
if self.isempty():
self.value = v
self.left = Tree()
self.right = Tree()
if self.value == v:
return
if v < self.value:
self.left.insert(v)
return
if v > self.value:
self.right.insert(v)
return
# Find maximum value in a nonempty tree
def maxval(self):
if self.right.isempty():
return(self.value)
else:
return(self.right.maxval())
# Delete value v from tree
def delete(self,v):
if self.isempty():
return
if v < self.value:
self.left.delete(v)
return
if v > self.value:
self.right.delete(v)
return
if v == self.value:
if self.isleaf():
self.makeempty()
elif self.left.isempty():
self.copyright()
else:
self.value = self.left.maxval()
self.left.delete(self.left.maxval())
return
# Inorder traversal
def inorder(self):
if self.isempty():
return([])
else:
return(self.left.inorder()+[self.value]+self.right.inorder())
# Display Tree as a string
def __str__(self):
return(str(self.inorder()))