| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 339 人关注过本帖
标题:请帮我修改一下这程序,我实在是没办法了
只看楼主 加入收藏
蓝色blue
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-1-24
收藏
 问题点数:0 回复次数:0 
请帮我修改一下这程序,我实在是没办法了

树(中序,前序,顺序,静态,传地址)

一、题目
以字母为元素,按中序(后根)顺序存储元素,按前序(先根)顺序存储元素的下标,实现树的基本操作:输出、输入、求树深、求叶子数、前序、中序、层序。
要求:①对于需要回传的参数,把实参的地址传给形传;②能在TC2环境下执行。

二、概要设计
1.存储结构

中序 前序
n d[0] … d[n-1] … a[0] … a[n-1] …
结点数 元素 … 元素 … 下标 … 下标 …
typedef struct{
int n;/*结点数*/
DataType d[MAX];/*中序*/
int a[MAX];/*前序*/
}BiTree;
2.基本操作
⑴void Puts(BiTree T)——按广义表形式输出二叉树。
⑵void Gets(BiTree *T,char **s)——由广义表形式串创建树。
⑶void Depth(BiTree T,int *i)——求树深。
⑷void Leaf(BiTree T,int *i)——求叶子数。
⑸void FPrint(BiTree T)——前序。
⑹void MPrint(BiTree T)——中序。
⑺void LePrint(BiTree T)——层序。

程序如下:


/*预处理*/
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
typedef char DataType;
/*存储结构*/
typedef struct{
int n;/*结点数*/
DataType d[MAX];/*中序*/
int a[MAX];/*前序*/
}BiTree;

/*基本操作*/
void Output(BiTree T){/*按广义表形式输出二叉树*/
cout<<"(";
if(T){
cout<<T->d;
if(T->l||T->r)cout<<",";
if(T->l)Output(T->l);
if(T->r){cout<<",";Output(T->r);}
}
cout<<")";
}
char Create(Bitree &T,char *s){/*由广义表形式串s创建树T*/
if(*s!='('||!*++s||*s=='('||*s==',')
printf("\n非法字符串!"),getch(),exit(1);
if(*s==')'){T=0;return s;}
T=new CSTNode;
if(!T)printf("\n内存不足!"),getch(),exit(1);
T->d=*s; T->s=0;
BiTree p=T;
while(*++s==',')s=Create(p->s,s+1),p=p->s;/*兄弟链*/
T->c=T->s;T->s=p->s=0;/*长子为左孩子*/
if(*s!=')')printf("\n非法字符串!"),getch(),exit(1);
return s;
}
int Depth(BiTree T,int *i){/*求树深*/
int i,j;
if(!T)return 0;
i=1+Depth(T *c); j=Depth(T *s);
return(i>j?i:j);
}
int Leaf(BiTree T,int *i){/*求叶子数*/
if(!T)return 0;
if(!T *c)return 1+Leaf(T->s);
return Leaf(T *c)+Leaf(T *s);
}
void FPrint(BiTree T){/*按先序输出各结点的值*/
if(!T)return;/*空树*/
cout<<T *d<<'\t';/*输出结点的值*/
FPrint(T *l);/*先序遍历左子树*/
FPrint(T *r);/*先序遍历右子树*/
}
void MPrint(BiTree T){/*按中序输出中各结点的值*/
if(!T)return;/*空树*/
MPrint(T *l);/*中序遍历左子树*/
cout<<T *d<<'\t';/*输出结点的值*/
MPrint(T *r);/*中序遍历右子树*/
}
void LePrint(BiTree T){/*按层序输出各结点的值*/
int d=Depth(T);/*树深*/
for(int i=1;i<=d;i++)Level(T,i);/*逐层输出*/
}
/*主函数*/
void main(){
BiTree T=0,T1=0;
char *s="(a,(b,(d,,(g))),(c,(e),(f,(h))))";
cout<<"\nT="; Output(T);
cout<<"\n\n按广义表形式串"<<s<<"创建二叉树创建二叉树T:";
cout<<"\nT="; Output(T);
cout<<"\t树深为"<<Depth(T)<<",叶子数为"<<Leaf(T);
cout<<"\nT1="; Output(T1);
cout<<"\t树深为"<<Depth(T1)<<",叶子数为"<<Leaf(T1);
cout<<"\nT1="; Output(T1);
cout<<"\t树深为"<<Depth(T1)<<",叶子数为"<<Leaf(T1);
cout<<"\n\nT的先序遍历为:"; FPrint(T);
cout<<"\nT的中序遍历为:"; MPrint(T);
cout<<"\nT的层序遍历为:"; LePrint(T);
getch();
}



请帮我修改一下,我实在是没办法了

搜索更多相关主题的帖子: 办法 
2007-01-24 20:14
快速回复:请帮我修改一下这程序,我实在是没办法了
数据加载中...
 
   



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

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