#include
typedef char elementType;
class node
{
public:
elementType data; //保存数据
class node *lchild; //左孩子指针
class node *rchild; //右孩子指针
};
class biTree
{
public:
node *L;
biTree()//构造函数
{
L=NULL;
}
void visit();//访问结点
bool crateBiTree(node *L,char strline[20][3],int nLen,int & nRow);//创建二叉树
int biTreeHeight(node *L);//求二叉树的高度
int biTreenum(node *L);//求二叉树的结点数
void cratesubTree(node *u , int n);
void crateBiTree();
void inOutput(node *L);//将二叉树按照先序次序输出结点度为2的结点
void destoryBiTree(node *L);//销毁二叉树
};
void biTree::cratesubTree(node *q , int n)
{
node *u;
elementType x;
cin>>x; //输入该结点的数据
//x=="/" 代表该结点没有子树
if(x!='/')
{
u=new node;
u->data=x;
u->lchild=NULL;//新建结点的左右子树为NULL
u->rchild=NULL;
if(n==1)//若n为1,则说明新建的为现在结点的左孩子
{
q->lchild=u;
}
if(n==2)//若n为2,则说明新建的为现在结点的右孩子
{
q->rchild=u;
}
cratesubTree(u,1);//递归创建左子树
cratesubTree(u,2);//递归创建右子树
}
}
void biTree::crateBiTree()
{
node *q;
elementType x;
cout<<"请按照先序序列输入二叉树:"<
cin>>x;
if(x=='/')
return;
//创建根结点的数据
L=new node;
L->data=x;
L->lchild=NULL;
L->rchild=NULL;
q=L; //将q指向根结点
cratesubTree(q,1);//递归创建根结点的左子树
cratesubTree(q,2);//递归创建根结点的右子树
}
//销毁二叉树
void biTree::destoryBiTree(node *L)
{
if(L)
{
destoryBiTree(L->lchild);
destoryBiTree(L->rchild);
delete L;
}
}
//访问并且输出结点
void biTree::visit()
{
cout<data<<" "<<endl;
}
//求二叉树的结点数
int biTree::biTreenum(node *L)
{
if(L==NULL)
return 0;
else
{
return biTreenum(L->lchild)+biTreenum(L->rchild)+1;
}
}
//将二叉树按照先序次序输出叶子结点
void biTree::inOutput(node *L)
{
if(L)
{
if(L->lchild==NULL && L->rchild==NULL )
cout<data<<" ";
else
{
inOutput(L->lchild);
inOutput(L->rchild);
}
}
}
//求二叉树的高度
int biTree::biTreeHeight(node *L)
{
int m , n;
if(L==NULL)
{
return 0;
}
else
{
m=biTreeHeight(L->lchild);
n=biTreeHeight(L->rchild);
if(m>n)
{
return m+1;
}
else
{
return n+1;
}
}
}
//主函数
int main()
{
biTree *root;
cout<<"1.请首先创建链式二叉树:"<<endl;
root->crateBiTree();
cout<<"2.请输出该二叉树的根结点:"<<endl;
root->visit();
cout<<"3.请求二叉树的结点个数:"<<endl;
cout<<root->biTreenum(root->L)<<endl;
cout<<"4.请求该二叉树中度为2的结点:"<<endl;
root->inOutput(root->L);
cout<<"5.请求该二叉树的高度:"<<endl;
root->biTreeHeight(root->L);
cout<<"6.销毁二叉树 ! "<<endl;
root->destoryBiTree(root->L);
return 0;
}
我在运行的时候 输入数据就崩溃,求大神帮忙