数据结构关于二叉排序树的问题
程序应该总体没什么问题……就是运行到树状查找的时候VC6.0就停止工作了……然后我调试的时候就会出现这样的情况[local]1[/local]然后我百度了下……说是我动态内存没有分配成功……233我基础不太扎实 求大神来讲解啊!明天交作业……
这是我的代码
谢谢大家~求帮忙嘤嘤嘤
#include<iostream>
#include<malloc.h>
#include <stdlib.h>
using namespace std;
#define MAX 100
typedef struct
{
int key[MAX];
int n;
}NodeType;
void SeqSearch(NodeType R,int n,int k)
{
int i=0;
while(i<n&&R.key[i]!=k)
i++;
if(i<n)
cout<<i<<":"<<R.key[i]<<endl;
}
void BinSearch(NodeType R,int n,int k)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(R.key[mid]==k)
{
cout<<mid<<":"<<R.key[mid]<<endl;
break;
}
else if(R.key[mid]>k)
high=mid-1;
else
low=mid+1;
}
}
typedef struct IdxType
{
int key[MAX];
int low[MAX],high[MAX];
}IdxType;
void IdxSearch(NodeType R,IdxType idx,int k,int bn) //bn为块的个数
{
int i,high=bn,low=1,mid,j,FIND=0;
while(low<=high&&!FIND)
{
mid=(low+high)/2;
if(k<idx.key[mid])
high=mid-1;
else if(k>idx.key[mid])
low=mid-1;
else
FIND=1;
}
if(FIND==1)
{
i=idx.low[mid];
j=idx.high[mid];
}
else if(low<bn)
{
i=idx.low[mid];
j=idx.high[mid];
}
while(i<=j&&R.key[i]!=k)
{
i++;
}
if(i>j)
i=0;
cout<<i<<":"<<R.key[i]<<endl;
}
void create(NodeType R,IdxType &Idx,int x,int z) //建立索引表
{
int i,j,k,t,max=0;
k=x/z;
t=x%z;
if(t==0)
{
for(i=0;i<z;i++)
{
for(j=z*i;j<k;j++)
{
if(max<R.key[j])
max=R.key[j];
}
Idx.key[i+1]=max;
Idx.low[i+1]=z*i;
Idx.high[i+1]=z*i+k;
}
}
else
{
for(i=0;i<z-1;i++)
{
for(j=z*i;j<k;j++)
{
if(max<R.key[j])
max=R.key[j];
}
Idx.key[i+1]=max;
Idx.low[i+1]=z*i;
Idx.high[i+1]=z*i+k;
}
if(i==z-1)
{
for(j=z*i;j<k+t;j++)
{
if(max<R.key[j])
max=R.key[j];
}
Idx.key[i+1]=max;
Idx.low[i+1]=z*i;
Idx.high[i+1]=z*i+k+t;
}
}
}
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void insert(BiTree &T,int x)
{
BiTree p,q;
int i=0;
p=(BiTree)malloc(sizeof(BiTNode));
p->data=x;
p->lchild=p->rchild=NULL;
if(T==NULL)
{
T=p;
}
else
{
q=T;
while(i==0)
{
if(p->data>x)
{
if(p->lchild!=NULL)
{
p=p->lchild;
}
else
{
p->lchild=q;
i=1;
}
}
else
{
if(p->data!=NULL)
{
p=p->rchild;
}
else
{
p->rchild=q;
i=1;
}
}
}
}
}
void creat(BiTree &T,NodeType R,int n)
{
int i=0;
while(1)
{
if(i>=n)
break;
else
{
insert(T,R.key[i]);
i++;
}
}
}
void TreeSearch(BiTree T,int k)
{
BiTree p;
p=T;
while(p!=NULL)
{
if(p->data=k)
{
cout<<p->data;
}
else if(k<p->data)
{
p=p->lchild;
}
else
p=p->rchild;
}
}
void main()
{
NodeType R,N;
IdxType Idx;
BiTree T;
int i,x,y,z,t;
cout<<"输入顺序表中元素个数:";
cin>>x;
for(i=0;i<x;i++)
{
cin>>R.key[i];
}
cout<<"输入要查找元素:";
cin>>y;
cout<<"顺序查找:";
SeqSearch(R,x,y);
cout<<"二分查找:";
BinSearch(R,x,y);
cout<<"输入非顺序表中元素个数:";
cin>>t;
for(i=0;i<t;i++)
{
cin>>N.key[i];
}
cout<<"分块查找:"<<endl;
cout<<"建立索引表:"<<endl;
cout<<"输入分块个数:";
cin>>z;
create(N,Idx,t,z);
IdxSearch(N,Idx,y,z);
cout<<"树状查找:"<<endl;
creat(T,N,t);
TreeSearch(T,y);
}