新手求高手指点

四流程序员的业余生活 2009-09-23 10:13:15
--------------------------------------------------------------------------------

我写了一点关于二叉树的代码,但是运行时总出现问题。我通过调试发现我的GreatBiTree(BiTree &T)函数似乎没有运行,但我不知道是什么问题,希望高手指点迷津。当然也欢迎各位都进来讨论一下,我在这里先谢谢各位了!!
我的完整的代码如下:(大家可以搞到自己的机器上运行一下(Vc++6.0))
#include <string.h>
#include <ctype.h>
#include <malloc.h>
#include <limits.h>
#include <stdio.h>
#include <io.h>
#include <math.h>
#include <process.h>//exit()
#include <iostream.h>//cout,cin
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status;
typedef int Boolean;//Booleanshi 是布尔类型,其值是TURE和FALSE
typedef int SElemType;
#include <stdio.h>
typedef char TElemType;
#define MAX_TREE_SIZE 5
typedef struct BiTNode//定义了二叉树的结构
{
TElemType date;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int i=0;
char ch;//是用来输入时的一个变量(全局变量)
Status CreateBiTree(BiTree &T)//这段代码是按照书(《数据结构》严蔚敏 吴伟民版)上来写的
{


cin>>ch;
if(ch=='#')
{
T=NULL;
cout<<"输入结束!!"<<endl;
}
else
{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->date=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}


return OK;
}
Status PrintElement(TElemType e)
{
printf("%c",e);
return OK;
}
Status PreOrderTraverse(BiTree T,Status(* visit)(TElemType e))//这是先序遍历,也是根据那本书写的
{
//PrintElement(T->date);
if(T)
{
if(PrintElement(T->date))
{
if (PreOrderTraverse(T->lchild, visit))
if (PreOrderTraverse(T->rchild, visit))
return OK;
}
return ERROR;

}
else
{
return OK;
}
}
void main ()
{
//TElemType e;
BiTree T;
CreateBiTree(T);//在这里构建一个树,但是在输入每个节点值的时候总出现问题
PreOrderTraverse(T,PrintElement);
}
...全文
63 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2009-09-24
  • 打赏
  • 举报
回复
没看出代码有什么问题,运行了一下貌似也正常。
唯一的问题是输入结点的次序很容易弄乱,尤其容易弄错#的位置。
最好先在纸上把树画好,空结点都画上#,然后标上输入的次序。

我的输入是:  ab##c##
创建成功,根结点是a,左右分别是b和c
b后面的两个#代表b的左右子节点都为空。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
没看出代码有什么问题,运行了一下貌似也正常。
唯一的问题是输入结点的次序很容易弄乱,尤其容易弄错#的位置。
最好先在纸上把树画好,空结点都画上#,然后标上输入的次序。

我的输入是:  ab##c##
创建成功,根结点是a,左右分别是b和c
b后面的两个#代表b的左右子节点都为空。
[/Quote]


那貌似就不能跳出递归了。我主要是想遍历一下,并在遍历的同时将每个节点的值输出来,但是始终做不到
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhongjiekangping 的回复:]
没有问题啊  你出错的问题是什么
[/Quote]
我就是想把它输出来,但是怎么也数不出来
zhongjiekangping 2009-09-24
  • 打赏
  • 举报
回复
没有问题啊 你出错的问题是什么

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧