请教各位一个问题,构造了一个排序二叉树,无输出,真心求指教
我构造了一个排序二叉树,插入操作后,中序遍历打印输出,但是没有结果,指向根节点的指针竟然是NULL,不知道哪里有问题,求指教
程序代码:#include "stdafx.h"
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
#define N 10
//定义数据结构
struct datetype
{
int key;
int other;
};
typedef struct BiTNode
{
datetype data;
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;
void inittable(BiTNode *p)
{
p=NULL;
}
//查找
//函数输入参数:树的指针,查找的关键字,节点的双亲指针,找到节点指针,查找结果标志位
void search(BiTNode *T,int key,BiTNode *f,BiTNode *p,int *flag)
{
//相关的初始化,看看符不符合要求
if(T==NULL)
{
*flag=0;
p=f;//返回T的上个指针,即查找不成功,停止的指针的位置
}
else
{
if(key==T->data.key)
{
*flag=1;
p=T;
}
else
if(key<=T->data.key)
search(T->lchild,key,T,p,flag);
else
search(T->rchild,key,T,p,flag);
}
}
//删除
//插入
int insertBST(BiTNode *T,struct datetype e)
{
int flag;
BiTNode *p=NULL,*s;
search(T,e.key,NULL,p,&flag);
if(flag==0)
{
printf("find falure!\n");
s=(BiTNode *)malloc(sizeof(BiTNode));
s->data=e;
s->lchild=s->rchild=NULL;
if(!p)
T=s;
else
if (e.key<(p->data.key))
{
p->lchild=s;
}
else
p->rchild=s;
return 0;
}
else
return 1;//树中已有关键字
}
//访问
void print(struct datetype c)
{
printf("(%d,%d) ",c.key,c.other);
}
void TraverseDSTable(BiTNode *DT,void(*Visit)(struct datetype))
{ /* 初始条件: 动态查找表DT存在,Visit是对结点操作的应用函数 */
/* 操作结果: 按关键字的顺序对DT的每个结点调用函数Visit()一次且至多一次 */
if(DT)
{
TraverseDSTable(DT->lchild,Visit); // 先中序遍历左子树
printf("ok\n");
Visit(DT->data); //再访问根结点
TraverseDSTable(DT->rchild,Visit); //最后中序遍历右子树
}
else
if(DT==NULL)
{
printf("没有数据在树中\n");
}
}
int main(void)
{
BiTNode *p,*dt=NULL;
int i;
int j;
struct datetype r[N]={{45,1},{12,2},{53,3},{3,4},{37,5},{24,6},{100,7},{61,8},{90,9},{78,10}}; /* 以教科书图9.7(a)为例 */
for(i=0;i<N;i++)
{
j=insertBST(dt,r[i]); /* 依次插入数据元素 */
if(j==0)
printf("insert sucessfull!\n");
}
TraverseDSTable(dt,print);
return 0;
}






