hello-algo/codes/dart/utils/print_util.dart

75 lines
1.2 KiB
Dart
Raw Normal View History

/**
* File: print_util.dart
* Created Time: 2023-01-23
* Author: Jefferson (JeffersonHuang77@gmail.com)
*/
import 'dart:io';
import 'list_node.dart';
import 'tree_node.dart';
class Trunk {
Trunk? prev;
String str;
Trunk(this.prev, this.str);
}
void printLinkedList(ListNode? head) {
List<String> list = [];
while (head != null) {
list.add('${head.val}');
head = head.next;
}
print(list.join(' -> '));
}
void printTree(TreeNode? root, [Trunk? prev = null, bool isLeft = false]) {
if (root == null) {
return;
}
String prev_str = ' ';
Trunk trunk = Trunk(prev, prev_str);
printTree(root.right, trunk, true);
if (prev == null) {
trunk.str = '---';
} else if (isLeft) {
trunk.str = '/---';
prev_str = ' |';
} else {
trunk.str = '\\---';
prev.str = prev_str;
}
showTrunks(trunk);
print(' ${root.val}');
if (prev != null) {
prev.str = prev_str;
}
trunk.str = ' |';
printTree(root.left, trunk, false);
}
void showTrunks(Trunk? p) {
if (p == null) {
return;
}
showTrunks(p.prev);
stdout.write(p.str);
}
void printHeap(List<int> heap) {
print("堆的数组表示:$heap");
print("堆的树状表示:");
TreeNode? root = listToTree(heap);
printTree(root);
}