#include
using namespace std;
struct tree{
tree lchild;
tree*rchild;
int data;
};
bool serchBST(tree *T,int key ,tree*f,tree&p);
void insertBST(tree*T,int key);
bool serchBST(tree T,int key ,tree *f,tree *&p)
{
if(!T)
{p=f;return false;}
else if(T->data==key)
{p=T;return true;}
else if(keydata)
return serchBST(T->lchild,key,T,p);
else
return serchBST(T->rchild,key,T,p);
}
void insert(tree*T,int key)
{
tree*p=NULL;
if(!serchBST(T,key,NULL,&p))
{
tree *s=new tree;
s->data=key;
s->lchild=s->rchild=NULL;
if(keydata)
p->lchild=s;
else
p->rchild=s;
delete s;
}
}
int main()
{
tree a;
tree p=NULL;
a.data=62;
a.lchild=a.rchild=NULL;
insert(&a,77);
cout<<serchBST(&a,77,NULL,&p);
}
代码如上所示,编译通过,算法没问题,但用VS调试的无法运行,serch函数,指针f指向T的双亲,初始调用NULL。查找成功,则指针p指向该元素结点,否则指向查找路径上访问的最后一个结点。感觉是insert函数有问题,请高手解答