baidu_28411433
baidu_28411433
采纳率50%
2015-05-22 13:27 阅读 1.9k
已采纳

程序没有报错,但停止工作

#include
#include
using namespace std;
int LeafNum;// 叶子结点数
//二叉链表的结构类型定义
const int maxsize = 20;
typedef char datatype;
typedef struct Binode
{
datatype data;
struct Binode *lchild, *rchild;
}BiTree;

BiTree*creattree()

{
char ch;
BiTree*Q[maxsize];
int front, rear;
BiTree *root, *s;
root = NULL;
front = 1;
rear = 0;
cout << "按层次输入二叉树,以'#'结束输入:"< cin >> ch;
while (ch!= '#')
{
rear++;
s = new BiTree;
s->data = ch;
s->lchild = s->rchild=NULL;
Q[rear] = s;
if (rear == 1)
root = s;
else
{
if (rear % 2 == 0)Q[front]->lchild = s;
else {
Q[front]->rchild = s;
front++;
}
}
cin >> ch;
}
return root;
}

//递归方法先序遍历二叉树
void preOrder(BiTree *T)
{
if(T) //若非空
{
if(T->data)
{ //输出
printf("%c",T->data);
}
preOrder(T->lchild);
preOrder(T->rchild);
}
}

//递归方法中序遍历二叉树
void inOrder(BiTree *T)
{
if(T) //若非空
{
preOrder(T->lchild);
if(T->data)
{ //输出
printf("%c",T->data);
}
preOrder(T->rchild);
}
}

//递归方法后序遍历二叉树
void postOrder(BiTree* T)
{
if(T) //若非空
{
preOrder(T->lchild);
preOrder(T->rchild);
if(T->data)
{ //输出
printf("%c",T->data);
}
}
}
//后序遍历求二叉树的高度递归算法
int PostTreeDepth(BiTree *T)

{
int hl,hr,max;
if(T!=NULL)
{
hl=PostTreeDepth(T->lchild); //求左子树的深度
hr=PostTreeDepth(T->rchild); //求右子树的深度
max=hl>hr?hl:hr; //得到左、右子树深度较大者
return(max+1); //返回树的深度
}
else
return(0); //如果是空树,则返回0
}

//叶子结点的个数以及元素
int TreeLeaf(BiTree *T)
{

if(T)
{
   if(!T->lchild&&!T->rchild)
   {
       LeafNum++;
       cout<<T->data<<" ";
   }
   TreeLeaf(T->lchild);
   TreeLeaf(T->rchild);
}
return LeafNum;

}

int main()
{
BiTree *T;
cout<<"创建二叉树"<<endl;
BiTree*creattree();

    cout<<"先序遍历:";
    preOrder(T);
    cout<<endl;

    cout<<"中序遍历:";
    inOrder(T);
    cout<<endl;

    cout<<"后序遍历:";
    postOrder(T);
    cout<<endl;

    cout<<"叶子结点为:";
    cout<<"叶子结点个数为:"<<TreeLeaf(T)<<endl;        

    cout<<"树的的深度:";
    cout<<PostTreeDepth(T)<<endl;

    return 0;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2015-05-22 13:49

    BiTree*creattree();
    ->
    T = creattree();

    点赞 评论 复制链接分享
  • u012271952 浪前青山 2015-05-23 01:11

    盆友,查找程序代码的错误,不能靠别人哦,自己要有能力debug,设置断点,单步运行。

    点赞 评论 复制链接分享
  • frank_20080215 frank_20080215 2015-05-23 01:33

    preOrder调用preOrder, inOrderr调用preOrder,postOrder调用preOrder。
    这三个递归一起玩,能玩得起来吗?

    点赞 评论 复制链接分享
  • u012377333 一枪尽骚丶魂 2015-05-23 06:36

    在你的main函数中,调用BiTree*creattree();有问题,改为T = creattree();

    点赞 评论 复制链接分享
  • lzmqhx lzmqhx 2015-05-23 07:59

    必须设置断电,然后自己调试,避免出现不懂得情况

    点赞 评论 复制链接分享

相关推荐