-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtree.py
More file actions
94 lines (66 loc) · 2.32 KB
/
tree.py
File metadata and controls
94 lines (66 loc) · 2.32 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
#!python
# solidity.readthedocs.io
class DjikstaTreeNode(object):
def __init__(self, weight):
self.weight = weight
self.id = id
self.is_visited = False
self.above = None
self.below = None
self.next = None
self.below_right = None
self.above_right = None
def __repr__(self):
return 'DjikstraTreeNode({!r})'.format(self.weight)
class DjikstraTree(object):
def __init__(self, items = None, grid_max_width = 5):
self.root = None
self.size = 0
self.grid_width = 0
self.grid_max_width = (grid_max_width)
if items is not None:
for item in items:
self.insert(item)
def __repr__(self):
return 'DjikstraTree({} nodes)'.format(self.size)
def is_empty(self):
return self.root is None
def insert(self, weight):
column = 0
# row = 0
node_id = 0
if self.is_empty(): # Handle case where tree is empty
self.root = DjikstaTreeNode(weight) # Set first node as root of tree
self.root.id = node_id # Set initial nodes id to 0
self.size += 1 # increase size for each added node
column += 1
return
prev_node = self._find_previous(node_id, self.root)
if column <= self.grid_max_width:
prev_node.next = DjikstaTreeNode(weight)
self.size += 1
column += 1
# if column > self.grid_max_width:
# column = 0
# row += 1
def _find_previous(self, node_id, node, prev_node = None):
if node is None:
return prev_node
elif node_id == node.id:
return prev_node
elif node_id < node.id:
return self._find_previous(node_id, node.next, node)
def _find_above(self, id):
pass
def _find_above_left(self, id):
pass
def test_djikstra_tree():
weights = [1, 2, 3, 4, 5]
print('items: {}'.format(weights))
tree = DjikstraTree()
tree.insert(weights[1])
for weight in weights:
tree.insert(weight)
print('insert({}), size: {}'.format(weight, tree.size))
print('tree: {}'.format(tree))
test_djikstra_tree()