二叉树排序的问题
没语法错误,执行出问题,帮我看看是哪里的问题哦??
- C/C++ code
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define MAX 10typedef int DataType;typedef struct BITNODE{ DataType data; struct BITNODE *lchild; struct BITNODE *rchild; }*BitTree,BitNode;BitTree T;int BSTCreate(BitTree *T,DataType x);BitTree BSTSearch(BitTree T,DataType x);int main(int argc,char *argv[]){ int i; BitTree p; T=NULL; DataType n,array[MAX]={37,32,35,62,82,95,73,12,5,1}; for(i=0;i<MAX;i++) BSTCreate(&T,array[i]); printf("Please input the number you want to search?:"); scanf("%d",&n); p=BSTSearch(T,n); printf("The number you search is:%d\n",p->data); return 0;}int BSTCreate(BitTree *T,DataType x){ BitTree p,cur,parent=NULL; cur=*T; while(cur!=NULL) { if(cur->data==x) return 0; parent=cur; if(cur->data>x) cur=cur->lchild; else cur=cur->rchild; } p=(BitTree)malloc(sizeof(BitNode)); if(!p) exit(-1); p->data=x; p->lchild=NULL; p->rchild=NULL; if(!parent) *T=p; else if(p->data>parent->data) p=parent->rchild; else p=parent->lchild; return 1;}BitTree BSTSearch(BitTree T,DataType x){ BitTree p; if(T==NULL) return NULL; p=T; while(p!=NULL) { if(p->data==x) return p; else if(p->data<x) p=p->rchild; else p=p->lchild; } return NULL;}[解决办法]
- C/C++ code
create函数中 if(!parent) *T=p; else if(p->data>parent->data) p=parent->rchild;//here else p=parent->lchild;//here改为: if(!parent) *T=p; else if(p->data>parent->data) parent->rchild = p; //here else parent->lchild = p;//here
[解决办法]
这么眼熟的代码,上次坛子里问的二叉树也是你吧。
2楼提的是正确的。增加一个一个判断,不然你输入查找一个不存在的数会段错误。
- C/C++ code
p=BSTSearch(T,n); printf("The number you search is:%d\n",p->data);改为: p=BSTSearch(T,n); if(p) { printf("The number you search is:%d\n",p->data); } else { printf("no such number\n"); }