@Test
public void preOrder_deep() {

  Tree<String> tree = tree("a")
      .setLeft(tree("b")
          .setLeft("c")
          .setRight(tree("d").setLeft("e")))
      .setRight(tree("f")
          .setLeft(tree("g").setRight("h")));
  assertThat(Tree.<String>walker().preOrderFrom(tree).map(Tree::value))
      .containsExactly("a", "b", "c", "d", "e", "f", "g", "h")
      .inOrder();
}