static void InorderTreeWalk(rb_red_blk_tree* tree, rb_red_blk_node* x, void (*walk_func) (const void* key, void* value, void* data), void *data) { if (x != tree->nil) { InorderTreeWalk(tree,x->left, walk_func, data); walk_func(x->key, x->info, data); InorderTreeWalk(tree,x->right, walk_func, data); } }
//红黑树中序遍历操作,isFirstCall变量目的:令默认参数为Treepoint,下同 void RBTree::InorderTreeWalk(Node* node, bool isFirstCall) { if (isFirstCall == 1) node = Treepoint; if (node != NIL) { InorderTreeWalk(node->getLeft(), 0); std::cout << node->getKey() << std::endl; InorderTreeWalk(node->getRight(), 0); } }
void rb_tree_walk(rb_red_blk_tree* tree, void (*walk_func) (const void* key, void* value, void* data), void *data) { InorderTreeWalk(tree, tree->root->left, walk_func, data); }