//  File: tree.C
//
//  Implementation of Tree class.  Probably not the final version

#include <stdio.h>
#include <stdlib.h>
#include "tree.h"


// Constructors

Tree::Tree() {
   itemp = NULL ;
   left = right = NULL ;
}

Tree::Tree(data x) {
   itemp = new Item(x) ;
   left = right = NULL ;
}

Tree::Tree(data x, Tree *lchild, Tree *rchild) {
   itemp = new Item(x) ;
   left  = lchild ;
   right = rchild ;
}


// Destructor

Tree::~Tree() {
//   printf("Tree destructor called!\n") ;
   delete itemp ;
   delete left ;
   delete right ;
}


// Traversal methods 

void Tree::Inorder() {
   printf("(") ;
   if (left  != NULL) left->Inorder() ;
   printf(" ") ;
   if (itemp != NULL) itemp->print() ;
   printf(" ") ;
   if (right != NULL) right->Inorder() ;
   printf(")") ;
}


void Tree::Preorder() {
   printf("(") ;
   if (itemp != NULL) itemp->print() ;
   printf(" ") ;
   if (left  != NULL) left->Preorder() ;
   printf(" ") ;
   if (right != NULL) right->Preorder() ;
   printf(")") ;
}


void Tree::Postorder() {
   printf("(") ;
   if (left  != NULL) left->Postorder() ;
   printf(" ") ;
   if (right != NULL) right->Postorder() ;
   printf(" ") ;
   if (itemp != NULL) itemp->print() ;
   printf(")") ;
}
