我一直在研究这个小程序。它从文件中读取数据(成员)并将其存储在二进制搜索树中。有两个功能,即打印所有成员和仅打印具有相同船类的所有成员。为此,它遍历了树。
void traverse_tree(member_node member,void(*print_members)(member_node)) {
print_members(member);
if (member->left != NULL) {
traverse_tree(member->left,print_members);
}
if (member->right != NULL) {
traverse_tree(member->right,print_members);
}
}
void list_by_boat_class(member_node member,char *boat_class,void(*print_members)(member_node)) {
if (strcmp(member->boat_class,boat_class) == 0) {
print_members(member);
}
if (member->left != NULL) {
list_by_boat_class(member->left,boat_class,print_members);
}
if (member->right != NULL) {
list_by_boat_class(member->right,print_members);
}
}
结构定义:
typedef struct member * member_node;
typedef struct member{
char name[NAME];
char personal_names[PERSONAL_NAMES];
int mem_id;
char email[EMAIL];
char boat_class[BOAT_CLASS];
char boat_name[BOAT_NAME];
struct member * left;
struct member * right;
}member;
遍历对我来说似乎是重复的代码。我试图将这些功能合并为一个,但是每个功能采用不同的参数。有什么解决办法还是必须分开?