if (x->left==RBNULL && x->right==RBNULL) {
/* leaf */
(*action)(x->key, leaf, level, arg);
} else {
(*action)(x->key, preorder, level, arg);
if (x->left==RBNULL && x->right==RBNULL) {
/* leaf */
(*action)(x->key, leaf, level, arg);
} else {
(*action)(x->key, preorder, level, arg);