请教各位一个问题,构造了一个排序二叉树,无输出,真心求指教
我构造了一个排序二叉树,插入操作后,中序遍历打印输出,但是没有结果,指向根节点的指针竟然是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; }