题目是:利用“扩展先序遍历序列”创建二叉链表,并对此链表进行先、中、后序遍历,最后按树状打印二叉树。
二叉树的“扩展先序遍历序列”为:AB.DF..G..C.E.H.. 其中小圆点表示空子树。
我按照书上给的一些算法写出的程序是:
#include "stdio.h"
#define Null 0
typedef struct Node
{
char data;
struct Node *LChild;
struct Node *RChild;
}BiTNode,*BiTree;
main()
{
BiTNode *myBiTree;
int nLayer;
void CreateBiTree(BiTree *);
void InOrder(BiTree);
void PreOrder(BiTree);
void PostOrder(BiTree);
void PrintTree(BiTree,int);
CreateBiTree(myBiTree);
printf("The BiTree:");
printf("\n");
printf("InOrder:");
InOrder(myBiTree);
printf("\n");
printf("PreOrder:");
PreOrder(myBiTree);
printf("\n");
printf("PostOrder");
PostOrder(myBiTree);
printf("\n");
printf("PrintTree:");
PrintTree(myBiTree,nLayer);
}
void CreateBiTree(BiTree *bt)
{
char ch;
printf("ch:");
ch=getchar();
if(ch=='.')
*bt=Null;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->LChild));
CreateBiTree(&((*bt)->RChild));
}
}
void InOrder(BiTree root)
{
if(root!=Null)
{
InOrder(root->LChild);
printf("%c\n",root->data);
InOrder(root->RChild);
}
}
void PreOrder(BiTree root)
{
if(root!=Null)
{
printf("%c\n",root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}
void PostOrder(BiTree root)
{
if(root!=Null)
{
PostOrder(root->LChild);
PostOrder(root->RChild);
printf("%c\n",root->data);
}
}
void PrintTree(BiTree Boot,int nLayer)
{
int i;
if(Boot==Null)
return;
PrintTree(Boot->RChild,nLayer+1);
for(i=0;i<nLayer;i++)
printf(" ");
printf("%c\n",Boot->data);
PrintTree(Boot->LChild,nLayer+1);
}
可是我运行不出来,这是怎么回事?