#include #include struct binop { struct exp * e1, * e2; }; union node { int value; struct binop b; }; struct exp { char tag; union node n; }; struct exp * newInt(int i) { struct exp * e; e = (struct exp *)malloc(sizeof(struct exp)); e->tag = 'I'; e->n.value = i; return e; } struct exp * newBinop(char op,struct exp * e1,struct exp * e2) { struct exp * e; e = (struct exp *)malloc(sizeof(struct exp)); e->tag = op; e->n.b.e1 = e1; e->n.b.e2 = e2; return e; } printTree(struct exp * e,int depth) { int i; for(i=0;itag) { case 'I': printf("%d\n",e->n.value); return; default: printf("%c\n",e->tag); printTree(e->n.b.e1,depth+1); printTree(e->n.b.e2,depth+1); } } main(int argc,char ** argv) { struct exp * e; e = newBinop('*',newBinop('+',newInt(1),newInt(2)), newBinop('-',newInt(3),newInt(4))); printTree(e,0); }