#include <iostream>

#define PLUS 1001

class Tree {
   int label;
   Tree *children[2];

public:


   Tree (int lab) {   label = lab;   }			/* leaf */

   Tree (int lab, Tree *t2)				/* unary */
   {
      label = lab;
      children[0] = t2;
   }

   Tree (int lab, Tree *t2, Tree *t3)			/* binary */
   {
      label = lab;
      children[0] = t2;
      children[1] = t3;
   }

   int eval_traverse()
   {
      int i;
      std::cout << label << std::endl;
      for(i=0; i<2; i++)
         children[i]->eval_traverse();
   }
};

void go_do_treestuff()
{
   Tree *t = new Tree(1);
   Tree *t2 = new Tree(2);
   Tree *t3 = new Tree(PLUS, t, t2);
   int i = t3->eval_traverse();
   printf("evaluates to %d\n", i);
}

