@@ -166,13 +166,6 @@ class ThreadedBinaryTree<V extends Comparable>
166
166
return result;
167
167
}
168
168
169
- void _postOrder (ThreadedBinaryNode <V >? node, List <V > list) {
170
- if (node == null ) return ;
171
- if (! (node.leftIsThread ?? false )) _postOrder (node.left, list);
172
- if (! (node.rightIsThread ?? false )) _postOrder (node.right, list);
173
- list.add (node.value! );
174
- }
175
-
176
169
@override
177
170
List <V > preOrder () {
178
171
var result = < V > [];
@@ -214,7 +207,7 @@ class ThreadedBinaryTree<V extends Comparable>
214
207
break ;
215
208
216
209
case _DeleteCase .oneChild:
217
- var child = node.leftIsThread! ? node.right : node.left;
210
+ var child = ( node.leftIsThread ?? true ) ? node.right : node.left;
218
211
219
212
if (parent == null ) {
220
213
root = child;
@@ -228,17 +221,19 @@ class ThreadedBinaryTree<V extends Comparable>
228
221
var predecessor = _inOrderPredecessor (node);
229
222
if (! (node.leftIsThread ?? true )) {
230
223
predecessor! .right = successor;
224
+ predecessor.rightIsThread = successor == null ? null : true ;
231
225
} else {
232
226
if (! (node.rightIsThread ?? true )) {
233
227
successor! .left = predecessor;
228
+ successor.leftIsThread = predecessor == null ? null : true ;
234
229
}
235
230
}
236
231
break ;
237
232
238
233
case _DeleteCase .twoChildren:
239
234
var successor = node.right! , parentSuccessor = node;
240
235
241
- while (successor.left != null && ! successor.leftIsThread! ) {
236
+ while (! successor.leftIsThread! ) {
242
237
parentSuccessor = successor;
243
238
successor = successor.left! ;
244
239
}
@@ -279,6 +274,14 @@ class ThreadedBinaryTree<V extends Comparable>
279
274
return node;
280
275
}
281
276
}
277
+
278
+ void _postOrder (ThreadedBinaryNode <V >? node, List <V > list) {
279
+ if (node == null ) return ;
280
+
281
+ if (! (node.leftIsThread ?? false )) _postOrder (node.left, list);
282
+ if (! (node.rightIsThread ?? false )) _postOrder (node.right, list);
283
+ list.add (node.value! );
284
+ }
282
285
}
283
286
284
287
enum _DeleteCase { twoChildren, oneChild, childless }
0 commit comments