谁帮我看看程序,数据结构中的先序遍历,怎么输出不了呢

来源:百度知道 编辑:UC知道 时间:2024/06/15 16:34:30
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OVERFLOW -1
#define ok 1
#define error -1
typedef char TElemType;

typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;

} BiTNode, *BiTree;
BiTree T;
int CreateBiTree( BiTree &T)
{ char ch;
scanf(&ch);
if(ch ==' ' ) T = NULL;
else {
if (!(T =(BiTNode * )malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T ->data = ch;
CreateBiTree(T -> lchild);
CreateBiTree(T -> rchild); }
return ok;}
char Preorder (BiTree T,int( *visit)(TElemType &e))
{

if ( T ) {
if( visit(T->data))
if(Preorder(T->lchild, visit))
if(Preorder(T->rchild, visit))
return ok;
return error;

仔细看了下你的程序,你的程序在构建二叉树的时候是有问题的。当然你写的程序可以构建,但是对你从键盘输入的字符序列有要求,也就是你必须按照特定序列格式输入,二叉树才能构建完成。
由于你构建二叉树的函数
int CreateBiTree( BiTree &T)
{ char ch;
scanf("%c",&ch);//这修改下,因为你要输入字符
if(ch ==' ' ) T = NULL;
else {
if (!(T =(BiTNode * )malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T ->data = ch;
CreateBiTree(T -> lchild);
CreateBiTree(T -> rchild); }
return ok;}
是递归构建,也就是先构建跟节点,在构建左节点,然后构建左节点下的左节点,直到需要空格字符停止构建。然后构建右节点。也就是说你这种构建方式要求你必须把空格字符写对正确位置,否则它会无限制需要字符构建节点。你这种递归式构建读入字符,正好是先根遍历的读入字符。也就是说只要你输入对应要构建二叉树先根遍历序列并且在对应的叶子节点后面加两个空格,(因为你递归程序遇到空格才结束)就可以输出结果了,结果就和你输入的序列是一样的,只是没有空格。
程序如下:你可以输入: ab两个空格c两个空格回车
就可以看到输出结果。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OVERFLOW -1
#define ok 1
#define error -1
typedef char TElemType;

typedef struct BiTNode {
TElemType data;
struct BiTNode