基于MIPS的二叉树MapReduce:map、reduce、mapreduce函数签名问询
Map/Reduce/MapReduce 函数签名说明
满二叉树节点结构定义
由于树的叶节点存储空终止ASCII字符串指针,非叶节点存储两个子节点指针,我们用带union的结构体定义节点:
typedef struct TreeNode { union { char* str; // 叶节点:指向空终止ASCII字符串 struct TreeNode* children[2]; // 非叶节点:左、右子节点指针数组 } data; bool is_leaf; // 标记节点类型(叶/非叶),用于遍历判断 } TreeNode;
map函数签名
map函数负责将单个空终止ASCII字符串转换为整数,函数原型与指针类型如下:
// 函数原型 int map(char* str); // 函数指针类型(作为mapreduce的参数) int (*map_func_ptr)(char*);
reduce函数签名
reduce函数负责合并两个整数结果(如求和、取最值),函数原型与指针类型如下:
// 函数原型 int reduce(int left_val, int right_val); // 函数指针类型(作为mapreduce的参数) int (*reduce_func_ptr)(int, int);
mapreduce函数签名
mapreduce作为入口函数,接收二叉树根节点、map函数指针、reduce函数指针,递归处理树后返回最终合并的整数结果:
int mapreduce(TreeNode* root, int (*map)(char*), int (*reduce)(int, int));
执行逻辑补充
mapreduce的核心逻辑:
- 若当前是叶节点:调用
map处理节点存储的字符串,返回对应整数 - 若当前是非叶节点:递归调用
mapreduce处理左、右子树,得到两个结果后用reduce合并返回
内容的提问来源于stack exchange,提问作者vcfny
相关产品推荐
相关产品推荐

