看你创建的代码怪怪的,改了下就行了
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
//二叉排序树的节点结构定义
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void Insert(BiTree *T,int num);
int InsertBST2( BiTree *T, int key );
void construct(BiTree *T);
void destroy(BiTree *T);
//输入
void Insert(BiTree *T,int num)
{
BiTree p;
p = (*T);
while(1)
{
if(!p)
{
p = (BiTNode*)malloc(sizeof(BiTNode));
p->data = num;
break;
}else if(num >= p->data)
{
p = p->rchild;
}else if(num < p->data)
{
p = p->lchild;
}
}
}
int InsertBST2( BiTree *T, int key )
{
/* 当二叉排序树T中不存在关键字等于key的数据元素时 */
/* 插入key并返回TRUE,否则返回FALSE */
/* 未调用查找函数,递归插入 */
if( !(*T) ) /* 树为空, */
{
(*T) = (BiTree)malloc(sizeof(BiTNode)); /* 这个位置要留心,要重新分配空间,*T为空,说明未曾分配空间 */
(*T)->data = key;
(*T)->lchild = (*T)->rchild = NULL;
//return TRUE;
}
if( key == (*T)->data )
return FALSE;
else if( key > (*T)->data )
return InsertBST2( &((*T)->rchild), key ); /* 插入右孩子 */
else
return InsertBST2( &((*T)->lchild), key ); /* 插入左孩子 */
}
//创建排序树
void construct(BiTree *T)
{
int j,i,num;
printf("请输入二叉树关键字数量:");
scanf("%d",&num);
for(i=1;i<=num;i++) //构建二叉排序树
{
printf("请输入 %d 个关键字:",j);
scanf("%d",&j);
InsertBST2(T,j);
}
/* while(1)
{
scanf("%d",&j);
//Insert(j,T);
InsertBST2(T,j);
if(getchar()=='\n')
{
break;
}
}*/
}
void InTraverse(BiTree T)
{
if(T)
{
InTraverse(T->lchild);
printf("%d ",T->data);
InTraverse(T->rchild);
}
}
//销毁树
void destroy(BiTree *T)
{
if(*T)
{
destroy(&(*T)->lchild);
free(*T);
destroy(&(*T)->rchild);
}
}
int main()
{
BiTree T = NULL;
construct(&T);
printf("二叉树递归中序遍历:\n");
InTraverse(T);
destroy(&T);
return 0;
}
|