This repository has been archived by the owner on Sep 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvisualize.py
69 lines (56 loc) · 2.16 KB
/
visualize.py
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
from graphviz import Digraph
class VisualizeData:
def visualize_avl(self, node):
dot = Digraph()
return self._visualize_avl(node.root, dot)
def visualize_heap(self, heap):
dot = Digraph()
return self._visualize_heap(heap, dot)
def _visualize_heap(self, tree, dot=None, i=0):
"""
Transverses the node and creates a graph.
Arguments:
arg1: [object] The node.
arg2: [object] The graphviz object.
Returns:
[object]: The graph.
"""
if dot is None:
dot = Digraph(strict=True)
dot.node(name=str(tree.heap[2 * i]), label='"' + str(tree.heap[2 * i]) + '"')
for i in range(1, tree.size+1):
if 2*i <= tree.size:
dot.node(name=str(tree.heap[i]), label=str(tree.heap[i]))
dot.edge(str(tree.heap[i//2]), str(tree.heap[i]))
if 2*i + 1 <= tree.size:
dot.node(name=str(tree.heap[2*i+1]), label=str(tree.heap[2*i+1]))
dot.edge(str(tree.heap[i]), str(tree.heap[2*i+1]))
return dot
def _visualize_avl(self, node, dot=None):
"""
Transverses the node and creates a graph.
Arguments:
arg1: [object] The node.
arg2: [object] The graphviz object.
Returns:
[object]: The graph.
"""
# Create Digraph object.
if node is not None:
# Add node to the graph.
dot.node(name=str(node), label=str(
node.key), xlabel=str(node.height))
# Traverse through the left subnode.
if node.left:
# Add node to the graph.
dot.edge(str(node), str(node.left))
# Recursive call through left subnode.
self._visualize_avl(node.left, dot)
# Traverse through the right subnode.
if node.right:
# Add node to the graph.
dot.edge(str(node), str(node.right))
# Recursive call through right subnode.
self._visualize_avl(node.right, dot)
# Return the graph.
return dot