怎么用 *c++* 来实现这个递归求最大最小值的算法算法

论坛 期权论坛 期权     
爪机粉群00C42   2018-4-26 13:54   6244   1
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
cn#GQkpGGBBkG  4级常客 | 2018-4-30 01:59:04 发帖IP地址来自
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef char TElemType;
typedef struct Btn{
TElemType data;
struct Btn *lchild , *rchild;
}BTN ,*BT;
int CreateBT(BT &T) {
//按前序遍历规则创建二叉树请输入结点
//(存结点用*代替)"AB*DG***CEM**N**F*X**"
char ch;
getchar();
printf("\n请输入二叉树元素\n");
scanf("%c",&ch);
if(ch == '*')T = NULL;
else {
if(!(T = (BTN *)malloc(sizeof(BTN)))) exit(OVERFLOW);
T->data = ch;
CreateBT(T->lchild);
CreateBT(T->rchild);
}
return OK;
}//创建二叉树
int PreOrderT(BT T ) {
//前序遍历二叉树 T:打印每结点数据域且仅
if (T != NULL) {
printf("%c \n", T -> data);
PreOrderT( T -> lchild ) ;
PreOrderT( T -> rchild ) ;
}
return OK;
}//先序遍历二叉树
int InOrderT(BT T) {
//序遍历二叉树 T:打印每结点数据域且仅
if (T != NULL) {
InOrderT( T -> lchild ) ;
printf("%c \n", T -> data);
InOrderT( T -> rchild ) ;
}
return OK;
}//序遍历二叉树 T
int PostOrderT(BT T) {
//序遍历二叉树 T:打印每结点数据域且仅
if (T != NULL) {
PostOrderT( T -> lchild ) ;
PostOrderT( T -> rchild ) ;
printf("%c \n", T -> data);
}
return OK;
}//序遍历二叉树 T
BT LocateElem(BT T , TElemType e){
//编写算二叉树T(二叉链表存储结构)查找数据元素e
//查找功返结点址;否则返NULL
BT s;
if (T->data == e || T == NULL ) return (T);
s = LocateElem ( T -> lchild, e ) ;
if ( s != NULL ) return (s);
else return ( LocateElem ( T -> rchild , e ) ) ;
}//查找数据元素e
int BTnum(BT T){
// 编写算统计二叉树T(二叉链表存储结构)结点总数
int i=0;
if (T != NULL) {
InOrderT( T -> lchild ) ;
i++;
InOrderT( T -> rchild ) ;
}
return i;
}
int BTdepth(BT T){
//编写算求二叉树T(二叉链表存储结构)深度
int rd,ld;
if(!T) return 0;
else { ld=BTdepth(T->lchild);
rd=BTdepth(T->rchild);
if(ld>rd) return rd+1;
else return ld+1;
}
}
/*int LevelElem(BT T,TElemType e){
//求eT层存返值0;否则返值层
int rd,ld;
if(!T) return 0;
else
if(e!=T->data){
ld=BTdepth(T->lchild);
rd=BTdepth(T->rchild);
if(ld>rd)
return rd+1;
else return ld+1;
}
}*/
int main(){
BT T;
TElemType e;
int /*Te,*/j;
while(j){
printf("\n请输入要功能\n");
printf("-----华丽割线------\n");
printf("1:按前序遍历规则创建二叉树\n");
printf("2:前序遍历二叉树 T\n");
printf("3:序遍历二叉树 T\n");
printf("4:序遍历二叉树 T\n");
printf("5:查找数据元素e\n");
printf("6:统计二叉树T结点总数\n");
printf("7:编写算求二叉树T深度\n");
printf("0:退程序\n");
// printf("8:求eT层\n");
printf("-----华丽割线------\n");
scanf("%d",&j);
switch(j){
case 1:CreateBT(T);break;
case 2:PreOrderT(T);break;
case 3:InOrderT(T);break;
case 4:PostOrderT(T);break;
case 5:
printf("\n请输入想要查找元素\n");
scanf("%c",&e);
LocateElem(T,e);break;
case 6: BTnum(T);
case 7:BTdepth(T);break;
/* case 8:
printf("\n请输入元素\n");
scanf("%c",&e);
Te=LevelElem(T,e);
printf("\n%c层数%d\n",e,Te);
break;*/
case 0:exit(1);
}
}
return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP