code: public void apply( Traversal order,
                         Operation operation ) {
          assert order != null;
          switch (order) {
              case LEVEL_ORDER:
                  operation.apply(this);
                  applyLevelOrder(order, operation);
                  break;
              case PRE_ORDER:
                  operation.apply(this);
                  for (PlanNode child : this) {
                      child.apply(order, operation);
                  }
                  break;
              case POST_ORDER:
                  for (PlanNode child : this) {
                      child.apply(order, operation);
                  }
                  operation.apply(this);
                  break;
          }
      }
docs: Walk the plan tree starting in the specified traversal order, and apply the supplied operation to every plan node.
  
  @param order the order in which the subtree should be traversed; may not be null
  @param operation the operation that should be applied; may not be null