帮忙看看这个错误是什么原因造成的
#include <iostream>
template <class T>
struct BTNode
{
T element;
BTNode<T>* lchild,*rchild;
BTNode()
{
lchild=rchild=NULL;
}
BTNode(T& x)
{
element=x;
lchild=rchild=NULL;
}
BTNode(T& x,BTNode<T>* l,BTNode<T>* r)
{
element=x;
lchild=l;
rchild=r;
}
};
template <class T> class BinaryTree;
template <class T>
class queue
{
public:
int front,rear,size;
BTNode<T>** q;
queue(int msize)
{
size=msize;
q=new BTNode<T>*[size];
front=rear=0;
}
BTNode<T>* dequeue()
{
int output=(front+1)%size;
front=output;
BinaryTree<T>* order[100];
return q[output];
}
void enqueue(BTNode<T>* x)
{
q[(rear=(rear+1)%size)]=x;
}
bool isempty()
{
return rear==front;
}
friend class BinaryTree<T>;
};
template <class T>
class BinaryTree
{
public:
BTNode<T>* root;
friend class BTNode<T>;
BinaryTree()
{
root=NULL;
}
void Clear(BTNode<T>* x)
{
if(x!=NULL)
{
Clear(x->lchild);
Clear(x->rchild);
delete x;
x=NULL;
}
}
void MakeTree(T x,BinaryTree<T>& left,BinaryTree<T>& right)
{
if(root||&left==&right)
{
return;
}
root=new BTNode<T>(x,left.root,right.root);
left.root=right.root=NULL;
}
int Height(BTNode<T>* x)
{
int hl,hr;
if(x==NULL)
{
return 0;
}
hl=Height(x->lchild);
hr=Height(x->rchild);
return 1+(hr>hl?hr:hl);
}
int Leaves(BTNode<T>* x)
{
int ll,rl;
if(x==NULL)
{
return 0;
}
else
{
if(x->lchild==NULL&&x->rchild==NULL)
{
return 1;
}
else
{
ll=Leaves(x->lchild);
rl=Leaves(x->rchild);
return ll+rl;
}
}
}
BTNode<T>* CopyTree(BTNode<T>* x)
{
BTNode<T> *tmp;
if(tmp==NULL)
{
return NULL;
}
else
{
tmp=new BTNode<T>();
tmp->element=x->element;
tmp->lchild=CopyTree(x->lchild);
tmp->rchild=CopyTree(x->rchild);
return tmp;
}
}
void Change(BTNode<T>* x)
{
BTNode<T>* tmp=NULL;
if(x!=NULL)
{
tmp=x->lchild;
x->lchild=x->rchild;
x->rchild=tmp;
Change(x->lchild);
Change(x->rchild);
}
}
void LevelOrder(BTNode<T>* x)
{
queue<T> order(100);
BTNode<T>* tmp=x;
BTNode<T>* out;
order.enqueue(tmp);
std::cout<<x->element;
if(tmp->lchild)
{
order.enqueue(tmp->lchild);
}
if(tmp->rchild)
{
order.enqueue(tmp->rchild);
}
while(!(order.isempty()))
{
out=order.dequeue();
tmp=(order.q)[order.front+1];
if(tmp->lchild)
{
order.enqueue(tmp->lchild);
}
if(tmp->rchild)
{
order.enqueue(tmp->rchild);
}
std::cout<<out->element<<',';
}
}
};
int main()
{
BinaryTree<char> a,b,x,y,z,c;
int leave,height;
y.MakeTree('E',a,b);
z.MakeTree('F',a,b);
x.MakeTree('C',y,z);
y.MakeTree('D',a,b);
z.MakeTree('B',y,x);
leave=z.Leaves(z.root);
height=z.Height(z.root);
std::cout<<"leave:"<<leave<<'\n';
std::cout<<"height:"<<height<<'\n';
z.LevelOrder(z.root);
z.Change(z.root);
z.LevelOrder(z.root);
c.root=z.CopyTree(z.root);
c.LevelOrder(c.root);
return 0;
}
我在linux下用g++编译通过,运行时显示:
leave:3
height:3
Segmentation fault
我想可能是指针出了问题,但是看了半天都没看出来,拜托各位帮忙看看,谢谢了~