Skip to content

Commit 9f17a71

Browse files
committed
implement postOrder
1 parent 9bd1e14 commit 9f17a71

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

Diff for: lib/trees/threaded_binary_tree.dart

+14
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ class ThreadedBinaryTree<V extends Comparable>
159159
return result;
160160
}
161161

162+
@override
163+
List<V> postOrder() {
164+
var result = <V>[];
165+
_postOrder(root, result);
166+
return result;
167+
}
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+
162176
@override
163177
List<V> preOrder() {
164178
var result = <V>[];

Diff for: test/trees/threaded_binary_tree_test.dart

+32-7
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ void main() {
3131
});
3232

3333
test('Test single node', () {
34-
expect(singleNode.root!.value, equals(0));
35-
expect(multipleNodes.root!.value, equals('l'));
34+
expect(singleNode.root!.value, equals('@'));
35+
expect(multipleNodes.root!.value, equals('f'));
3636
});
3737

3838
test('Nullify', () {
@@ -43,8 +43,8 @@ void main() {
4343

4444
test('Check contains', () {
4545
expect(empty.contains(''), isFalse);
46-
expect(singleNode.contains('@'), isFalse);
47-
expect(singleNode.contains(''), isTrue);
46+
expect(singleNode.contains('@'), isTrue);
47+
expect(singleNode.contains(''), isFalse);
4848
expect(multipleNodes.contains('nope'), isFalse);
4949

5050
for (var i in ['f', 'b', 'g', 'a', 'd', 'i', 'c', 'e', 'h']) {
@@ -60,13 +60,12 @@ void main() {
6060
equals(<String>['f', 'b', 'a', 'd', 'c', 'e', 'g', 'i', 'h']));
6161
});
6262

63-
// Results in stack overflow.
6463
test('Post-order', () {
6564
expect(empty.postOrder(), <String>[]);
6665
expect(singleNode.postOrder(), <String>['@']);
6766
expect(multipleNodes.postOrder(),
6867
equals(<String>['a', 'c', 'e', 'd', 'b', 'h', 'i', 'g', 'f']));
69-
}, skip: true);
68+
});
7069

7170
test('In-order', () {
7271
expect(empty.inOrder(), <String>[]);
@@ -169,6 +168,32 @@ void main() {
169168
var list = multipleNodes.inOrder();
170169

171170
multipleNodes.delete('f');
172-
expect(multipleNodes.inOrder(), (list..remove('m')));
171+
expect(multipleNodes.inOrder(), equals(list..remove('f')));
172+
173+
multipleNodes.delete('a');
174+
expect(multipleNodes.inOrder(), equals(list..remove('a')));
175+
176+
multipleNodes.delete('i');
177+
expect(multipleNodes.inOrder(), equals(list..remove('i')));
178+
179+
multipleNodes.delete('c');
180+
expect(multipleNodes.inOrder(), equals(list..remove('c')));
181+
182+
multipleNodes.delete('e');
183+
expect(multipleNodes.inOrder(), equals(list..remove('e')));
184+
185+
multipleNodes.delete('d');
186+
expect(multipleNodes.inOrder(), equals(list..remove('d')));
187+
188+
multipleNodes.delete('b');
189+
expect(multipleNodes.inOrder(), equals(list..remove('b')));
190+
191+
multipleNodes.delete('g');
192+
expect(multipleNodes.inOrder(), equals(list..remove('g')));
193+
194+
multipleNodes.delete('h');
195+
expect(multipleNodes.inOrder(), (list..remove('h')));
196+
197+
expect(multipleNodes.isEmpty, isTrue);
173198
});
174199
}

0 commit comments

Comments
 (0)