-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_bst.py
More file actions
50 lines (42 loc) · 955 Bytes
/
create_bst.py
File metadata and controls
50 lines (42 loc) · 955 Bytes
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
import random
class Node(object):
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def __repr__(self):
return "({})".format(self.data)
def create_bst(arr):
l = len(arr)
if l == 0:
return None
m = int(l / 2)
n = Node(arr[m])
n.left = create_bst(arr[:m])
n.right = create_bst(arr[m + 1:])
return n
def create_bst_optimized(arr, start = None, end = None):
if start == None:
start = 0
end = len(arr) - 1
if start > end:
return None
m = int((start + end) / 2)
n = Node(arr[m])
n.left = create_bst_optimized(arr, start, m - 1)
n.right = create_bst_optimized(arr, m + 1, end)
return n
def preorder_traverse(n):
if not n:
return
print(n, end=", ")
preorder_traverse(n.left)
preorder_traverse(n.right)
def main():
arr = [random.randint(100, 10000) for i in range(100)]
arr = sorted(arr)
print(arr)
n = create_bst_optimized(arr)
preorder_traverse(n)
if __name__ == "__main__":
main()