假设node的子节点都在children数组中。
void print_ast(Node* ptr, int depth)
{
int i;
int n = (depth - 1) * 2;
for (i = 0; i < n; i++) {
putchar(buffer[i]);
}
if (depth > 0) {
putchar('|');
putchar('_');
}
n = depth * 2;
buffer[n] = '|';
buffer[n + 1] = ' ';
if (!ptr->isLeaf()) {
printf("%s
", ptr->name);
} else {
printf(" 33[1;33m%s 33[0m
", ptr->name);
}
for (i = 0; i < ptr->size; i++) {
if (i == ptr->size - 1) {
buffer[n] = ' ';
}
print_ast(ptr->children[i], depth + 1);
}
}