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

91 lines
1.6 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);
}
/* 打印矩阵 (Array) */
void printMatrix(List<List<int>> matrix) {
print("[");
for (List<int> row in matrix) {
print(" $row,");
}
print("]");
}
/* 打印链表 */
void printLinkedList(ListNode? head) {
List<String> list = [];
while (head != null) {
list.add('${head.val}');
head = head.next;
}
print(list.join(' -> '));
}
/**
*
* This tree printer is borrowed from TECHIE DELIGHT
* https://www.techiedelight.com/c-program-print-binary-tree/
*/
2023-11-01 05:14:22 +08:00
void printTree(TreeNode? root, [Trunk? prev = null, bool isRight = false]) {
if (root == null) {
return;
}
String prev_str = ' ';
Trunk trunk = Trunk(prev, prev_str);
printTree(root.right, trunk, true);
if (prev == null) {
trunk.str = '———';
2023-11-01 05:14:22 +08:00
} else if (isRight) {
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);
}