我写了一个有关二叉树的创建和先序遍历的程序,代码如下:
#include "stdio.h"
#include <stdlib.h>
#define FALSE 0
#define TRUE 1
#define BOOL bool
#define NULL 0
typedef struct BiTNode{
char chData; //元素
struct BiTNode *lchild, *rchild; //左孩子、右孩子
}BiTNode, *BiTree;
void CreateBiTree(BiTree& T)
{
char ch;
scanf("%c%c", &ch);
if(ch=='\n')
{
printf("ch=NULL\n");
T = NULL;
}
else{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
{
printf("malloc fail\n");
return ;
}
T->chData = ch; //生成根结点
printf("请输入%c的左孩子:\n", ch);
CreateBiTree(T->lchild); //构造左子树
printf("请输入%c的右孩子:\n", ch);
CreateBiTree(T->rchild); //构造右子树
printf("construct right\n");
}
return ;
}
void PreOrder(BiTree T) //对二叉树进行先序遍历
{
if (T){
printf("%c",T->chData);
PreOrder(T->lchild);
PreOrder(T->rchild);
}//end of if
}//end of preorder
int main(int argc, char*& argv)
{
BiTree b1;
int iPos = 0;
printf("请输入节点元素值(没有孩子元素就直接回车):\n");
CreateBiTree(b1);
PreOrder(b1);
return TRUE;
}
运行没问题,但是只要删除printf("ch=NULL\n");或者printf("construct right\n");
就会出现不停滚屏的情况,简直就是闻所未闻!而且打印的内容长度还不能小,如果删除了construct right的一个字母一样不行。请教各位高手指点!
是在WIN2000下由cl编译的。
一个有关二叉树的非常奇怪的问题!!