@@ -83,80 +83,6 @@ def children(self, u):
83
83
v = self .right_sib [v ]
84
84
return ret
85
85
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
-
160
86
def get_interval (self ):
161
87
return self .left , self .right
162
88
0 commit comments