// File: tree.C // // Implementation of Tree template class #include #include #include #include "tree.h" //====================================================================== // Implementation of TreeNode member functions // homebrewed new operator. Might throw a MemoryError exception. // template void *TreeNode::operator new(size_t n) { void *ptr = malloc(n) ; if (ptr == NULL) { throw( MemoryError() ) ; } return ptr ; } // homebrewed delete operator. // template void TreeNode::operator delete(void *ptr) { if (ptr == NULL) return ; free(ptr) ; } //====================================================================== // Implementation of TreeNode member functions // Constructors // template Tree::Tree() { root = NULL ; } template Tree::Tree(const TYPE& t) { root = new TreeNode(t) ; } template Tree::Tree(const TYPE& t, const Tree& left, const Tree& right) { root = new TreeNode(t) ; root->left = left ; root->right = right ; } // Destructor // template Tree::~Tree() { delete root ; root = NULL ; // insurance, if this is part of a bigger tree } // Homebrewed new operator. Might throw a MemoryError exception. // template void *Tree::operator new(size_t n) { void *ptr = malloc(n) ; if (ptr == NULL) { throw(MemoryError()) ; } return ptr ; } // Homebrewed delete operator. // template void Tree::operator delete(void *ptr) { if (ptr == NULL) return ; free(ptr) ; } // Perform an inorder tree traversal // template void Tree::inorder() { if (root == NULL) return ; root->left.inorder() ; cout << root->data << " " ; root->right.inorder() ; } // Perform an preorder tree traversal // template void Tree::preorder() { if (root == NULL) return ; cout << root->data << " " ; root->left.preorder() ; root->right.preorder() ; } // Perform a postorder tree traversal // template void Tree::postorder() { if (root == NULL) return ; root->left.postorder() ; root->right.postorder() ; cout << root->data << " " ; }