sincerelyw 2015-12-03 14:19 采纳率: 0%
浏览 1495

求大神帮忙纠错C++用类实现二叉树的有关功能

#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;

}
我在运行的时候 输入数据就崩溃,求大神帮忙

  • 写回答

1条回答 默认 最新

  • threenewbee 2015-12-03 15:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划