using System; class BinaryTree { public T value; public BinaryTree left; public BinaryTree right; public BinaryTree(T value) { this.value = value; } public BinaryTree Map(Func f) { BinaryTree tree = new BinaryTree(f(this.value)); if (this.left != null) { tree.left = this.left.Map(f); } if (this.right != null) { tree.right = this.right.Map(f); } return tree; } }