求助:一个莫名其妙的的 bug !
问题描述:写了一个二叉树的测试代码,顺序执行是没问题的,可是想要中序遍历输出多次时,运行出错了,请问是什么原因呢?// for (i=0; i<3; i++) //一旦执行这条语句运行就出错!何故?
{
printf("\n中序:");
InOrderPrint(bt); //中序遍历输出结点(递归)
}
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef char ElemType;
typedef int Status; //函数类型,其值是函数结果状态代码,如OK等
typedef struct BiTreeNode{
ElemType data;
struct BiTreeNode *lchild, *rchild;//左,右孩子指针
} BiTreeNode, *BiTree;
void InOrderPrint(BiTree p); //中序遍历输出结点(递归)
void CreateBiTree(BiTree *bt);//生成一棵二叉排序树(输入单个字符,以#结束)
BiTree NewBiTree(ElemType x);//构造一个数据域为x的新结点
void Insert(BiTree *b, BiTree s);//在二叉排序树中插入新结点s
int main(void)
{
BiTree bt;
int i;
CreateBiTree(&bt);//生成一棵二叉排序树(输入单个字符,以#结束)
// for (i=0; i<3; i++) //一旦执行这条语句运行就出错!何故?
{
printf("\n中序:");
InOrderPrint(bt); //中序遍历输出结点(递归)
}
system("PAUSE");
return 0;
}
void CreateBiTree(BiTree *bt)//生成一棵二叉排序树(输入单个字符,以#结束)
{
BiTree s;
ElemType x;
scanf("%c", &x);
while (x != '#')
{
s = NewBiTree(x);//构造一个数据域为x的新结点
Insert(bt, s);//在二叉排序树中插入新结点s
scanf("%c", &x);
}
}
BiTree NewBiTree(ElemType x)//构造一个数据域为x的新结点
{
BiTree s = (BiTree)malloc(sizeof(BiTreeNode));
if (!s)
{
printf("Out of space!");
exit (1);
}
s->data = x;
s->lchild = s->rchild = NULL;
return s;
}
void Insert(BiTree *b, BiTree s)//在二叉排序树中插入新结点s
{
if (*b == NULL)
*b = s;
else if ((*b)->data == s->data)//不做任何插入操作
return;
else if((*b)->data > s->data)//把s所指结点插入到左子树中
Insert(&(*b)->lchild, s);
else //把s所指结点插入到右子树中
Insert(&(*b)->rchild, s);
}
void InOrderPrint(BiTree p) //中序遍历输出结点(递归)
{
if (p != NULL)
{
InOrderPrint(p->lchild); //遍历左子树
printf("%c ", p->data);//输出该结点
InOrderPrint(p->rchild); //遍历右子树
}
}