-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBST_Practice.py
More file actions
94 lines (81 loc) · 2.12 KB
/
BST_Practice.py
File metadata and controls
94 lines (81 loc) · 2.12 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
def minHeightBst(array):
newArray = []
insertArray = minHeightArray(array, newArray)
print('Queue of list to insert:', insertArray)
myTree = BST(insertArray.pop(0))
while len(insertArray) > 0:
myTree.insert(insertArray.pop(0))
return myTree
def minHeightArray(array, newarray):
if not array:
return
mid = (len(array) // 2)
newarray.append(array[mid])
minHeightArray(array[:mid],newarray)
minHeightArray(array[mid+1:],newarray)
return newarray
def preOrderTraverse(tree, array): # 5, 3, 2, 4, 7
# Write your code here.
array.append(tree.value)
if tree.left:
preOrderTraverse(tree.left, array)
if tree.right:
preOrderTraverse(tree.right, array)
return array
def getLevelAverage(tree):
dic = {}
print('dic before', dic)
if tree:
helperDepth(tree, dic)
ans = []
for i in dic:
ans.append(sum(dic[i])/len(dic[i]))
print('my depths', dic)
return ans
def helperDepth(tree, dic, depth = 0):
if not tree:
return
if depth not in dic:
dic[depth] = [tree.value]
else:
dic[depth].append(tree.value)
helperDepth(tree.left, dic, depth+1)
helperDepth(tree.right, dic, depth+1)
class BST:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert(self, value):
if value < self.value:
if self.left is None:
self.left = BST(value)
else:
self.left.insert(value)
else:
if self.right is None:
self.right = BST(value)
else:
self.right.insert(value)
# 5
# / \
# 3 7
# / \
# 2 4
# arr = [3, 2, 4, 7]
# 13
# / \
# 7 15
# / \ / \
# 5 10 14 22
# /
# 2
arr = [2, 5, 7, 10, 13, 14, 15, 22]
tree = minHeightBst(arr)
# newTree = BST(5)
# for i in arr:
# newTree.insert(i)
print()
print()
ans = getLevelAverage(tree)
print('average of each level from the root: ', ans)