| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 519 人关注过本帖
标题:[讨论]字符的输入问题
只看楼主 加入收藏
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
 问题点数:0 回复次数:6 
[讨论]字符的输入问题

大家好,在做二叉树的实验时遇到了一些问题,主要描述见附件,主要涉及的是字符的输入问题,请大家讨论一下这个问题该怎么解决。不防运行一下这个程序,我在这里也不好怎么说明白。谢谢!

搜索更多相关主题的帖子: 字符 输入 
2006-05-21 00:27
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
附件在哪里

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-21 00:34
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
得分:0 

#include"stdio.h"

#include"malloc.h"

#define OK 1

#define ERROR 0

#define OVERFLOW -1

/* 定义TelemTypechar类型 */

typedef char TelemType;

typedef int Status;

/* 二叉树的结点类型 */

typedef struct BitNode

{ TelemType data;

struct BitNode *lchild,*rchild;

}BitNode,*BiTree;

//初始化二叉树,即把树根指针置空

Status BinTreeInit(BiTree &BT)

{

BT=(BitNode *)malloc(sizeof(BitNode));

if(!BT) return OVERFLOW;

BT=NULL;

return OK;

}//BinTreeInit

// 按先序次序建立一个二叉树

Status BinTreeCreat(BiTree &BT)

{

char ch; scanf("%c",&ch);

if(ch=='#') BT=NULL; //"#"表示没有这个结点

else{

BT=(BitNode *)malloc(sizeof(BitNode));

if(!BT) return ERROR;

BT->data=ch;

BinTreeCreat(BT->lchild);

BinTreeCreat(BT->rchild);

}

return OK;

}//BinTreeCreat

// 检查二叉树是否为空

Status BinTreeEmpty(BiTree BT)

{

if(BT==NULL) return OK;

return ERROR;

}//BinTreeEmpty

//按任一种遍历次序(包括按先序、中序、后序、按

//层次)输出二叉树中的所有结点,这里用先序遍历

void BinTraverse(BiTree BT) //这里用先序遍历法

{

if(BT){

printf("%c",BT->data);

BinTraverse(BT->lchild);

BinTraverse(BT->rchild);

}

}//BinTraverse

// 利用后序遍历法求二叉树的深度

int BinTreeDepth(BiTree BT)

{

int depl,depr;

if(BT){

depl=BinTreeDepth(BT->lchild);

depr=BinTreeDepth(BT->rchild);

if(depl>=depr)return depl+1;

else return depr+1;

}

else return ERROR;

}//BinTreeDepth

//求二叉树中所有结点数

int BinTreeCount(BiTree BT)

{

if(BT==NULL) return 0;

else return 1+BinTreeCount(BT->lchild)+BinTreeCount(BT->rchild);

}

//递归利用后序遍历法清除二叉树,使之变为空树

Status BinTreeClear(BiTree &BT)

{

if(BT){

BinTreeClear(BT->lchild);

BinTreeClear(BT->rchild);

BT=NULL;

free(BT);return OK;

}

}//BinTreeClear

int scan()

{

int d;

printf("1.初始化一棵二叉树 2.建立一棵二叉树\n");

printf("3.检查二叉树是否为空 4.按先序遍历二叉树\n");

printf("5.求二叉树的深度 6.求二叉树的结点个数\n");

printf("7.清除二叉树,使之为空 \n");

printf("3.其他键退出...........\n");

scanf("%d",&d);return d;

}//scan

void main()

{

int depth,count;

int quit=0;

BiTree BT;

while(!quit)

switch(scan())

{case 1:if(BinTreeInit(BT)) printf("初始化成功\n");break;

case 2:if(BinTreeCreat(BT)) printf("二叉树已建立\n");break;

case 3:if(BinTreeEmpty(BT))printf("二叉树为空\n");

else printf("二叉树不为空\n");break;

case 4:printf("二叉树的所有结点是:");

BinTraverse(BT);

printf("\n");

break;

case 5:depth=BinTreeDepth(BT);

printf("二叉树的深度为:%2d\n",depth);

break;

case 6:count=BinTreeCount(BT);

printf("二叉树的结点数是:%2d\n",count);

break;

case 7:if(BinTreeClear(BT))printf("二叉树已清空\n");

break;

case 0:quit=1;break;

}

}
在求深度的时候得到的结果是4,在求结点个数的时候得到的结果是6,不明白这是为什么?检查程序也不知道是什么错误


做一名C程序员怎么样?
2006-05-21 00:36
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
楼主强啊!

求深度用递归,求结点总数遍历一下就可以了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-21 00:43
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
我倒,怎么用的引用方式,TC挂了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-21 00:45
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
得分:0 

附件忘记上传了不好意思啊 .程序见上面的啊.问题是在计算树的深度和广度的时候会多1。


做一名C程序员怎么样?
2006-05-21 11:09
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
得分:0 

运行结果如下:
1.初始化一棵二叉树 2.建立一棵二叉树
3.检查二叉树是否为空 4.按先序遍历二叉树
5.求二叉树的深度 6.求二叉树的结点个数
7.清除二叉树,使之为空
3.其他键退出...........
1
初始化成功
1.初始化一棵二叉树 2.建立一棵二叉树
3.检查二叉树是否为空 4.按先序遍历二叉树
5.求二叉树的深度 6.求二叉树的结点个数
7.清除二叉树,使之为空
3.其他键退出...........
2
ABC##DE#G##F####
二叉树已建立
1.初始化一棵二叉树 2.建立一棵二叉树
3.检查二叉树是否为空 4.按先序遍历二叉树
5.求二叉树的深度 6.求二叉树的结点个数
7.清除二叉树,使之为空
3.其他键退出...........
5
二叉树的深度为: 6
1.初始化一棵二叉树 2.建立一棵二叉树
3.检查二叉树是否为空 4.按先序遍历二叉树
5.求二叉树的深度 6.求二叉树的结点个数
7.清除二叉树,使之为空
3.其他键退出...........
6
二叉树的结点数是: 8
1.初始化一棵二叉树 2.建立一棵二叉树
3.检查二叉树是否为空 4.按先序遍历二叉树
5.求二叉树的深度 6.求二叉树的结点个数
7.清除二叉树,使之为空
3.其他键退出...........

谁帮忙看看怎么会是这个结果呢?


做一名C程序员怎么样?
2006-05-21 11:17
快速回复:[讨论]字符的输入问题
数据加载中...
 
   



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

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