public static IBinaryTree <TResult> Select <TResult, T>( this IBinaryTree <T> tree, Func <T, TResult> selector) { if (tree == null) { throw new ArgumentNullException(nameof(tree)); } if (selector == null) { throw new ArgumentNullException(nameof(selector)); } var visitor = new SelectBinaryTreeVisitor <T, TResult>(selector); return(tree.Accept(visitor)); }