帮我看看这段代码吧,为什么一用模版就出错?
我用的是VC 6.0
template <class Type>
class BinTreeNode
{
friend class BinaryTree<Type>;
private:
BinTreeNode<Type> *leftChild,*rightChild;
Type data;
public:
BinTreeNode() {
leftChild=0;
rightChild=0;
}
BinTreeNode(Tpye d,BinTreeNode<Type> *left,BinTreeNode<Type> *right) {
data=d;
leftChild=left;
rightChild=right;
}
Type &GetData() {return data;}
BinTreeNode<Type> *GetleftChild() {return leftChild;}
BinTreeNode<Type> *GetrightChild() {return rightChild;}
void SetData(Type d){data=d;}
void SetLeftChild(BinTreeNode<Type> *L) {left=L;}
void SetRightChild(BinTreeNode<Type> *R) {right=R;}
};
template <class Type>
class BinaryTree
{
private:
BinTreeNode<Type> *root;
private:
BinTreeNode<Type> *Parent(BinTreeNode<Type> *r,BinTreeNode<Type> *p){
BinTreeNode<Type> *q;
if(r==0) return 0;
if(r->GetleftChild()==p||r->GetrightChild()==p) return r;
if(q=Parent(r->GetleftChild(),p)!=0) return q;
else return Parent(r->GetrightChild(),p);
}
void destory(BinTreeNode<Type> *p) {
if(p!=0) {
destory(p->GetleftChild());
destory(p->GetrightChild());
delete p;
}
}
void PreOrder(BinTreeNode<Type> *r) {
if(r!=0) {
cout <<r->GetData() <<" ";
PreOrder(r->GetleftChild());
PreOrder(r->GetrightChild());
}
}
void InOrder(BinTreeNode<Type> *r) {
if(r!=0) {
InOrder(r->GetleftChild());
cout <<r->GetData() <<" ";
InOrder(r->GetrightChild());
}
}
void PostOrder(BinTreeNode<Type> *r) {
if(r!=0) {
PostOrder(r->GetleftChild());
PostOrder(r->GetrightChild());
cout <<r->GetrightChild()) <<" ";
}
}
public:
BinaryTree():root(0){}
BinaryTree(Type d):root(d){}
virtual ~BinaryTree() {destory(root);}
bool IsEmpty() {root=0?1:0;}
BinTreeNode<Type> *Root() {return root=0?0:root;}
void CreateRoot(Type d) {data=d;}
BinTreeNode<Type> *Parent(BinTreeNode<Type> *p) {return Parent(root,p);}
BinTreeNode<Type> *LeftChild(BinTreeNode<Type> *p) {return p->GetleftChild();}
BinTreeNode<Type> *RightChild(BinTreeNode<Type> *p) {return p->GetrightChild();}
BinTreeNode<Type> *LeftSibling(BinTreeNode<Type> *p) {
BinTreeNode<Type> *q=Parent(root,p);
if(p==q->GetleftChild()||q->GetrightChild()==0) return 0;
else return q->GetleftChild();
}
BinTreeNode<Type> *RightSibling(BinTreeNode<Type> *p) {
BinTreeNode<Type> *q=Parent(root,p);
if(p==q->GetrightChild()||q->GetleftChild()==0) return 0;
else return q->GetrightChild();
}
Type Retrieve(BinTreeNode<Type> *p) {return p->GetData();}
void Assign(BinTreeNode<Type> *p,Type d) {p->SetData(d);}
void InsertLeftChild(BinTreeNode<Type> *p,Type d) {
BinTreeNode<Type> *q=new BinTreeNode<Type>(d);
q->SetLeftChild(p->GetleftChild);
p->SetLeftChild(q);
}
void InsertRightChild(BinTreeNode<Type> *p,Type d) {
BinTreeNode<Type> *q=new BinTreeNode<Type>(d);
q->SetrightChild(p->GetrightChild);
p->SetRightChild(q);
}
void DeleteLeftChild(BinTreeNode<Type> *p) {destory(p->GetleftChild());}
void DeleteRightChild(BinTreeNode<Type> *P) {destory(p->GetrightChild());}
void PreOrder() {PreOrder(root);}
void InOrder() {InOrder(root);}
void PostOrder() {PostOrder(root);}