读书人

二叉树排序的有关问题

发布时间: 2012-04-07 17:31:50 作者: rapoo

二叉树排序的问题
没语法错误,执行出问题,帮我看看是哪里的问题哦??

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");    } 

读书人网 >软件架构设计

热点推荐