Mostly just syntax errors, and some of the definitions were undeclared:
Code:
class BinaryTree
{
public:
BinaryTree();
~BinaryTree();
BinaryTree(Type v, BinaryTree &l, BinaryTree &r);
void inorder(void (*visit)(Type));
void preorder(void (*visit)(Type));
void reorder(void (*visit)(Type));
void postorder(void (*visit)(Type));
protected:
TreeNode *root;
private:
void inorder(TreeNode *t, void (*visit)(Type));
void preorder(TreeNode *t, void (*visit)(Type));
void reorder(TreeNode *t, void(*visit)(Type));
void postorder(TreeNode *t, void(*visit)(Type));
};
template <class Type>
BinaryTree<Type>::BinaryTree(){
root = 0;
}
template <class Type>
BinaryTree<Type>::BinaryTree(Type v, BinaryTree &l, BinaryTree &r){
root = new TreeNode(v,l.root,r.root);
}
template <class Type>
BinaryTree<Type>::~BinaryTree(){
if (root!=0)delete root;
}
template <class Type>
void BinaryTree<Type>::inorder(void (*visit)(Type)){
if (root!=0)inorder(root, visit);
}
template <class Type>
void BinaryTree<Type>::inorder(TreeNode *t, void(*visit)(Type)){
if (t->left!=0)inorder(t->left, visit);
visit(t->left);
if(t->right!=0)inorder(t->right, visit);
}
template <class Type>
void BinaryTree<Type>::reorder(void (*visit)(Type)){
if (root!=0)preorder(root, visit);
}
template <class Type>
void BinaryTree<Type>::reorder(TreeNode *t, void(*visit)(Type)){
visit(t->left);
if (t->left!=0)preorder(t->left, visit);
if(t->right!=0)preorder(t->right, visit);
}
template <class Type>
void BinaryTree<Type>::postorder(void (*visit)(Type)){
if (root!=0)postorder(root, visit);
}
template <class Type>
void BinaryTree<Type>::postorder(TreeNode *t, void(*visit)(Type)){
if (t->left!=0)preorder(t->left, visit);
if(t->right!=0)preorder(t->right, visit);
visit(t->left);
}