| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖
标题:统计二叉树结点函数的问题 ,求大神看看错哪了
只看楼主 加入收藏
邪风揽明月
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-10-11
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
统计二叉树结点函数的问题 ,求大神看看错哪了
#include<stdio.h>
#include<stdlib.h>
int m,n,k;
typedef struct node
{
    int data;
    struct node*lchild,*rchild;
}Bonde;
Bonde *creat()
{
    int i,x,j;Bonde *q,*s[20];
    Bonde*t=NULL;printf("\n i,x=");scanf("%d%d",&i,&x);
    while((i!=0)&&(x!=0))
    {
        q=(struct node*)malloc(sizeof(struct node));
        q->data=x;q->lchild=NULL;q->rchild=NULL;
        s[i]=q;
        if(i==1) t=q;
        else{
            j=i/2;
            if((i%2)==0) s[j]->lchild=q;
            else s[j]->rchild=q;
        }
        printf("\n i,x=");scanf("%d%d",&i,&x);
    }
    return t;
}
void middleorder(Bonde *p)
{
    if(p!=NULL)
    {
        middleorder(p->lchild);
        printf("%6d",p->data);
        middleorder(p->rchild);
    }
}
void lastorder(Bonde *p)
{
    if(p!=NULL)
    {
        lastorder(p->lchild);
        lastorder(p->rchild);
        printf("%6d",p->data);
    }
}
void lastorderz(Bonde *p)
{
    Bonde*s[10],*q;int s2[20];
    int top=0,boo=1;
    q=p;
    printf("后根遍历");
    do{while(q!=NULL)
    {top++;s[top]=q;
    s2[top]=1;
    q=q->lchild;
}
if(top==0) boo=0;
else{
    if(s2[top]==1)
    {
        s2[top]=2;
        q=s[top];
        q=q->rchild;
    }
    else{
        q=s[top];
        s2[top]=0;top--;
        printf("%6d",q->data);
        q=NULL;}
    }
}while(boo==1);
printf("\n");
}
void levelorder(Bonde*p)
{
    Bonde*q[20];
    int front=0,rear=0;
    if(p!=NULL){rear++;q[rear]=p;}
    while(front!=rear)
    {
        front++;p=q[front];printf("%6d",p->data);
        if(p->lchild!=NULL){rear++;q[rear]=p->lchild;}
        if(p->rchild!=NULL){rear++;q[rear]=p->rchild;}
    }
}
void numofleaf(Bonde*p,int &m)
{
    if(p!=NULL)
    {if(p->lchild==NULL&&p->rchild==NULL)
    m++;
    numofleaf(p->lchild,m);
    numofleaf(p->rchild,m);
}
}
int fstdepth(Bonde*p)
{
    if(p==NULL) return 0;
    else{
        int dl=fstdepth(p->lchild);
        int dr=fstdepth(p->rchild);
        return 1+(dl>dr? dl:dr);
    }
}
main()
{char ch; int k,n,dep;
do{
    printf("\n\n\n");
    printf("\n\n       1.建立二叉树方法 ");
    printf("\n\n       2.先序,中序,后序递归遍历二叉树");
    printf("\n\n       3.计算树中叶子结点个数");
    printf("\n\n       4.求树的深度");
    printf("\n\n       5.结束程序运行");
    printf("\n==============================================");
    printf("\n请输入您的选择(1,2,3,4)");scanf("%d",&k);
    switch(k)
    {case 1: t=creat();break;
     case 2:{printf("先序遍历二叉树结果\n");
             fstdepth(t);
             printf("中序遍历二叉树结果\n");
             middleorder(t);
             printf("后序遍历二叉树结果\n");
             lastorder(t);
             printf("\n\n 按Enter键,继续。");ch=getch();
}break;
     case 3:{ numofleaf(t,n);
     printf("\n 二叉树叶子结点数num=%d",n);
     printf("\n\n 按Enter键,继续。");ch=getch();getch()
     }break;
     case 4:{ dep=fstdepth(t);
              printf("\n二叉树的深度为dep=%d",dep);
              printf("\n\n按Enter键,继续。");ch=getch();
           }
           case 5:exit(0);
  }
  printf("\n---------");
  }while(k>=1&&k<5);
  printf("\n      再见!");
  printf("\n      按Enter键,返回。");ch=getch();getchar
  }
搜索更多相关主题的帖子: include 二叉树 统计 
2013-11-14 22:40
邪风揽明月
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-10-11
收藏
得分:0 
{case 1: t=creat();break;


C-free提示这行错误
2013-11-14 22:40
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:14 
switch(k)
    {case 1: t=creat();break//此t非彼t

www.qunxingw.wang
2013-11-15 11:44
邪风揽明月
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2013-10-11
收藏
得分:0 
回复 3楼 qunxingw
那要怎么修改
2013-11-15 12:47
快速回复:统计二叉树结点函数的问题 ,求大神看看错哪了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017682 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved