Recursive Preorder for Distinct
Node/Poly Implementation
void poly::print_preorder (void)
{
  if (get_tag()==I) cout << ival() << " ";
  else { // must be pointer to a node
    node<poly> * np = pval();
    while (np != NULL){
      (np->data).print_preorder();
      np = np->next;
    }
  }
}