编辑代码

/**
 * @file 树结构映射
 * 数组 map 保持数组长度相同,将对应位置元素进行映射。
 * 与之类似,在二叉树 Tree 上的映射我们称为 mapTree,该函数返回一个结构相同的新树,对应位置 value 字段经过 fn 映射。
 */

type Tree = {
    value: number;
    left?: Tree;
    right?: Tree;
}

function mapTree(tree: Tree, fn: (v: number) => number): Tree {
    // 补全此处代码
    if (!tree) return tree;
    tree.value = fn(tree.value);
    tree.left && mapTree(tree.left, fn);
    tree.right && mapTree(tree.right, fn);
    return tree;
}

// 测试
const tree: Tree = {
    value: 1,
    left: { value: 2 },
    right: { value: 3 }
};
console.log(mapTree(tree, v => v * 2)) // { value: 2, left: { value: 4 }, right: { value: 6 } }