/* this is very haphazzard */ void show_tree(rtn_t * root, struct trunk *prev, int is_left) { char *prev_str = NULL; struct trunk this_disp; if (root == NULL) return; this_disp.prev = prev; this_disp.str = " "; prev_str = this_disp.str; /* */ show_tree(root->next[0], &this_disp, 1); if (!prev) this_disp.str = "---"; else if (is_left) { this_disp.str = ".--"; prev_str = " |"; } else { this_disp.str = "`--"; prev->str = prev_str; } /* */ show_trunks(&this_disp); printf("%d\n", *(int *)root->data); if (prev) prev->str = prev_str; this_disp.str = " |"; show_tree(root->next[1], &this_disp, 0); if (!prev) puts(""); }
static void __show(t_avl const *const avl, t_node const *const root, t_trunk *const prev, int const is_left) { t_trunk disp = {" ", prev}; char *prev_str = disp.str; if (root == nil) return; __show(avl, root->node[0], &disp, 1); if (!prev) disp.str = "---"; else if (is_left) { disp.str = ".--"; prev_str = " |"; } else { disp.str = "`--"; prev->str = prev_str; } show_trunks(&disp); fflush(stdin); avl->hook_print(root->val); if (prev) prev->str = prev_str; disp.str = " |"; __show(avl, root->node[1], &disp, 0); if (!prev) printf("\n"); }
void show_trunks(struct trunk *p) { if (!p) return; show_trunks(p->prev); printf("%s", p->str); }
/* show */ static void show_trunks(t_trunk const *const trunk) { if (!trunk) return; show_trunks(trunk->prev); printf("%s", trunk->str); }