/* * 打印"红黑树" * * tree -- 红黑树的节点 * key -- 节点的键值 * direction -- 0,表示该节点是根节点; * -1,表示该节点是它的父结点的左孩子; * 1,表示该节点是它的父结点的右孩子。 */ static void rbtree_print(RBTree tree, Type key, int direction) { if(tree != NULL) { if(direction==0) // tree是根节点 printf("%2d(B) is root\n", tree->key); else // tree是分支节点 printf("%2d(%s) is %2d's %6s child\n", tree->key, rb_is_red(tree)?"R":"B", key, direction==1?"right" : "left"); rbtree_print(tree->left, tree->key, -1); rbtree_print(tree->right,tree->key, 1); } }
int main(int argc, char **argv) { int *v; int i; char buf[256]; int c; int ofx = 0; rbtree_t *rbt = rbtree_create(rbtree_cmp_keys_int32, free); printf("\e[1;1H\e[2J"); printf("Enter an integer number: "); while((c = getchar())) { if (c == EOF) break; if (c == '\n') { buf[ofx] = 0; int *num = malloc(sizeof(int)); *num = strtol(buf, NULL, 10); printf("Added node: %d\n\n", *num); rbtree_add(rbt, num, sizeof(int), num, sizeof(int)); printf("\e[1;1H\e[2J"); rbtree_print(rbt); ofx = 0; printf("Enter an integer number: "); } else {
void migrate_show() { rbtree_print(migrate_tree, fill_page_to_migrate); pages_array.status = malloc(sizeof(*pages_array.status)*pages_array.count); int ret = numa_move_pages(pid, pages_array.count, pages_array.pages, pages_array.nodes, pages_array.status, MPOL_MF_MOVE_ALL); printf("#%d pages migrated (result = %d %s)\n", pages_array.count, ret, move_pages_to_error_code(ret)); int i; for(i = 0; i < pages_array.count; i++) { printf("#%lx %d %d %s\n", (long unsigned)pages_array.pages[i], pages_array.nodes[i], pages_array.status[i], status_to_error(pages_array.status[i])); } }
void print_rbtree(RBRoot *root) { if (root!=NULL && root->node!=NULL) rbtree_print(root->node, root->node->key, 0); }