Repository navigation
Expand file tree
/
Copy pathtest.py
More file actions
78 lines (58 loc) · 1.95 KB
/
Copy pathtest.py
File metadata and controls
78 lines (58 loc) · 1.95 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
import unittest
def minHeightBst(array):
mid = len(array)//2
bst = BST(array[mid])
buildTree(array, bst, 0, mid-1)
buildTree(array, bst, mid+1, len(array)-1)
return bst
def buildTree(array, bst=None, startIdx=0, endIdx=0):
if startIdx > endIdx or startIdx<0 or endIdx>len(array)-1:
return None
mid = (endIdx + startIdx)//2
print("--->", mid)
bst.insert(array[mid])
buildTree(array, bst, startIdx, mid-1)
buildTree(array, bst, mid+1, endIdx)
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)
def inOrderTraverse(tree, array):
if tree is not None:
inOrderTraverse(tree.left, array)
array.append(tree.value)
inOrderTraverse(tree.right, array)
return array
def validateBst(tree):
return validateBstHelper(tree, float("-inf"), float("inf"))
def validateBstHelper(tree, minValue, maxValue):
if tree is None:
return True
if tree.value < minValue or tree.value >= maxValue:
return False
leftIsValid = validateBstHelper(tree.left, minValue, tree.value)
return leftIsValid and validateBstHelper(tree.right, tree.value, maxValue)
def getTreeHeight(tree, height=0):
if tree is None:
return height
leftTreeHeight = getTreeHeight(tree.left, height + 1)
rightTreeHeight = getTreeHeight(tree.right, height + 1)
return max(leftTreeHeight, rightTreeHeight)
array = [1, 2, 5, 7, 10, 13, 14, 15, 22]
tree = minHeightBst(array)
validateBst(tree)
print(getTreeHeight(tree))
inOrder = inOrderTraverse(tree, [])
print(inOrder)