Skip to content

Commit c2b63fb

Browse files
Refactor node traversal tests and identify issues.
1 parent 0f94cc8 commit c2b63fb

File tree

2 files changed

+303
-144
lines changed

2 files changed

+303
-144
lines changed

python/tests/__init__.py

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -83,80 +83,6 @@ def children(self, u):
8383
v = self.right_sib[v]
8484
return ret
8585

86-
def _preorder_nodes(self, u, node_ist):
87-
node_ist.append(u)
88-
for c in self.children(u):
89-
self._preorder_nodes(c, node_ist)
90-
91-
def _postorder_nodes(self, u, node_ist):
92-
for c in self.children(u):
93-
self._postorder_nodes(c, node_ist)
94-
node_ist.append(u)
95-
96-
def _inorder_nodes(self, u, node_ist):
97-
children = self.children(u)
98-
if len(children) > 0:
99-
mid = len(children) // 2
100-
for v in children[:mid]:
101-
self._inorder_nodes(v, node_ist)
102-
node_ist.append(u)
103-
for v in children[mid:]:
104-
self._inorder_nodes(v, node_ist)
105-
else:
106-
node_ist.append(u)
107-
108-
def _levelorder_nodes(self, u, node_ist, level):
109-
node_ist[level].append(u) if level < len(node_ist) else node_ist.append([u])
110-
for c in self.children(u):
111-
self._levelorder_nodes(c, node_ist, level + 1)
112-
113-
def _minlex_postorder_nodes(self, u, node_ist):
114-
node_ist.extend(self._minlex_postorder_nodes_helper(u)[1])
115-
116-
def _minlex_postorder_nodes_helper(self, u):
117-
"""
118-
For a given input ID u, this function returns a tuple whose first value
119-
is the minimum leaf node ID under node u, and whose second value is
120-
a list containing the minlex postorder for the subtree rooted at node u.
121-
The first value is needed for sorting, and the second value is what
122-
finally gets returned.
123-
"""
124-
children = self.children(u)
125-
if len(children) > 0:
126-
children_return = [self._minlex_postorder_nodes_helper(c) for c in children]
127-
# sorts by first value, which is the minimum leaf node ID
128-
children_return.sort()
129-
minlex_postorder = []
130-
for _, child_minlex_postorder in children_return:
131-
minlex_postorder.extend(child_minlex_postorder)
132-
minlex_postorder.extend([u])
133-
return (children_return[0][0], minlex_postorder)
134-
else:
135-
return (u, [u])
136-
137-
def nodes(self, root=None, order="preorder"):
138-
roots = [root]
139-
if root is None:
140-
roots = self.roots
141-
for u in roots:
142-
node_list = []
143-
if order == "preorder":
144-
self._preorder_nodes(u, node_list)
145-
elif order == "inorder":
146-
self._inorder_nodes(u, node_list)
147-
elif order == "postorder":
148-
self._postorder_nodes(u, node_list)
149-
elif order == "levelorder" or order == "breadthfirst":
150-
# Returns nodes in their respective levels
151-
# Nested list comprehension flattens node_list in order
152-
self._levelorder_nodes(u, node_list, 0)
153-
node_list = iter([i for level in node_list for i in level])
154-
elif order == "minlex_postorder":
155-
self._minlex_postorder_nodes(u, node_list)
156-
else:
157-
raise ValueError("order not supported")
158-
yield from node_list
159-
16086
def get_interval(self):
16187
return self.left, self.right
16288

0 commit comments

Comments
 (0)