You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hello-algo/codes/dart/utils/print_util.dart

73 lines
1.2 KiB

/**
* File: PrintUtil
* 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(' -> '));
}
/*
* Print a binary tree
* @param root
* @param prev
* @param isLeft
*/
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);
}